环境:Eclipse,Selenium-webdriver 2.31,Junit4。 我正在修改一些脚本,现在当我执行这个片段时,chrome的浏览器启动了两次,这很明显,但我不知道如何只启动一次chrome并执行测试方法。请纠正我。
这是我传递参数的LoginPage类。如果我没有初始化WebDriver实例,那么将弹出NPE Exception。
代码:
@RunWith(Parameterized.class)
public class LoginPage{
WebDriver driver = new ChromeDriver();
String username;
String password;
public LoginPage(String username, String password)
{
this.username = username;
this.password = password;
}
@Test
public void loginAs(){
user.sendKeys(this.username);
pass.sendKeys(this.password);
}
}
现在是Suite类,其中提到了套件类。 Link类是另一个类。
TestSuite类 代码:
@RunWith(Suite.class)
@SuiteClasses({
LoginPage.class, Link.class
})
public class LoginTest{
static WebDriver driver;
@BeforeClass
public static void start()throws Exception
{
System.setProperty("webdriver.chrome.driver", "E:/Selenium/lib/chromedriver.exe");
driver = new ChromeDriver();
driver.get("URL");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
System.out.println("Before Class");
}
@AfterClass
public static void teardown()
{
//
}
答案 0 :(得分:3)
您在代码中创建了2个chrome实例:首先是@BeforeClass
@BeforeClass
public static void start()throws Exception
{
System.setProperty("webdriver.chrome.driver", "E:/Selenium/lib/chromedriver.exe");
driver = new ChromeDriver();
当你创建LoginPage对象时再次。
public class LoginPage{
WebDriver driver = new ChromeDriver();
因此,根据您的需要,您必须删除其中一个。
我无法确切地看到用户和传递变量的分配位置,但假设它们是小部件,您可能从驱动程序获取它们。因此,如果你没有在LoginPage中启动驱动程序,你确实会得到nullpointer。
如果您仍然需要在@BeforeClass中启动驱动程序,并且希望在代码中使用相同的驱动程序实例,则可以为此获取一个getter。
@RunWith(Suite.class)
@SuiteClasses({
LoginPage.class, Link.class
})
public class LoginTest{
static WebDriver driver;
public WebDriver getWebDriver(){
return driver; }
@BeforeClass
......
你可以在login的构造函数中调用它:
WebDriver driver;
public LoginPage(String username, String password)
{
this.username = username;
this.password = password;
driver = LoginTest.getWebDriver();
}