Wie pass namens WebDriver driver von @BeforeMethod an @Test in TestNG Java Webdriver
Ich habe diese Klasse An:
package automationFramework;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import pageObject.devSplashScreenPage;
import utility.BrowserType;
import utility.Constant;
import appModule.SignIn_Action;
public class SignIn {
public WebDriver driver;
@BeforeMethod
@Parameters("browser")
public void SetUp(String browser) {
BrowserType.Execute(driver, browser);
}
@Test
public void signIn() {
//Call Sign In function
SignIn_Action.Execute(driver, Constant.StudentUsername, Constant.StudentPassword);
}
@AfterMethod
public void Teardown() {
driver.quit();
}
}
Wo rufe ich diesen code unter die wählt der browser mit dem parameter übergeben wird. Es funktioniert einwandfrei, er nimmt die richtigen browser und führt Sie aus.
package utility;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class BrowserType {
@Test
public static void Execute(WebDriver driver, String browser) {
//Set Browsers
if(browser.equalsIgnoreCase("firefox")) {
driver = new FirefoxDriver();
}
else if (browser.equalsIgnoreCase("chrome")) {
{System.setProperty("webdriver.chrome.driver","C:/Users/elsid/Desktop/Eclipse/Selenium/chromedriver.exe");}
driver = new ChromeDriver();
}
else if (browser.equalsIgnoreCase("ie")) {
{System.setProperty("webdriver.ie.driver","C:/Users/elsid/Desktop/Eclipse/Selenium/IEDriverServer.exe");}
driver = new InternetExplorerDriver();
{DesiredCapabilities iecapabilities = DesiredCapabilities.internetExplorer();
iecapabilities.setCapability(InternetExplorerDriver.IE_ENSURE_CLEAN_SESSION, true);}
}
//Implicit Wait and Maximize browser
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
//Navigate to URL
driver.get(Constant.URL);
}
}
So alles führt völlig in Ordnung in @BeforeMethod, das Problem, das ich habe, ist der test beendet, da der Fahrer nicht pass von @BeforeMethod auf @Testen.
Wie bekomme ich die Treiber, die initiiert wird, durch ausführen von BrowserType.class in der @Test Sign_in.class. Ich denke, wie kann ich wieder die Treiber korrekt von der browsertype-und nennen es in Sign_in @Test.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie Ihre
Execute
Funktion Rückkehr der Fahrer:Im test:
So lösen, wie dieses:
BrowserType.java:
SignIn.java Klasse:
Die Art, wie Ihr die Dinge erheblich verbessert werden kann.
Geben Sie einfach die Treiber-Objekt (aus dem DataProvider). Ich nehme an, Ihr erzeugen der Treiber-Instanz, die innerhalb der DataProvider-Methode, da Ihre test-Methode ist bereits parametriert und die der Fahrer braucht.
Diesem code, den ich oben zeige nicht kompilieren, aber das, was ich versuche zu vermitteln ist, dass Sie hier benötigen, verwenden Sie die optionalen TestNG arg in die
@BeforeMethod
Methode, dieObject[]
, und es gibt Ihnen Zugriff auf Objekte übergeben Prüfverfahren, BEVOR die test-Methode aufgerufen wird, wie der Zugriff auf einen "driver helper" erstellt, in der DataProvider-Fabrik, und dann tun einige Funktionen setup auf, bevor der test lief.