0

环境: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);


}

}

现在这就是套件类,其中提到了套件类。链接类是另一个类。

测试套件类代码:

@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()
{
  //
}
4

1 回答 1

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();

因此,根据您的需要,您必须删除其中之一。

我无法真正看到用户和传递变量的分配位置,但假设它们是 web 元素,您可能会从驱动程序中获取它们。因此,如果您不在 LoginPage 中启动驱动程序,您确实会得到空指针。

如果您仍然需要在 @BeforeClass 中启动驱动程序并且您想在代码中使用相同的驱动程序实例,您可以为此获得一个 getter。

@RunWith(Suite.class)
@SuiteClasses({
LoginPage.class, Link.class
})
public class LoginTest{
static WebDriver driver;

public WebDriver getWebDriver(){
    return driver; }
@BeforeClass
......

您可以在登录的构造函数中调用它:

WebDriver driver;


public LoginPage(String username, String password)
{
    this.username = username;
    this.password = password;
    driver = LoginTest.getWebDriver();
    }
于 2013-09-12T12:20:14.550 回答