我们有一个静态变量来初始化 Selenium WebDriver 中的驱动程序。
公共(public)静态 WebDriver 驱动程序;
该变量在类(DriverInit)中声明,并在各种测试计划(测试类)的“@BeforeClass”中初始化。初始化的变量(驱动程序)将在整个项目中的各种可重用函数和@test方法中使用。驱动程序将在 @QAfterClass
处关闭/退出这对于非并行执行脚本来说效果很好。使用静态变量来初始化驱动程序是否会影响并行执行?
例如:
public class DriverInit { (using remote webdriver, browser name will be read from XML)
public static WebDriver driver;
public DriverInit() {
switch (browser) {
case "IE" : driver = ....
case "Firefox" : driver = ....
}
}
}
public class TestClass {
@BeforeClass
public void BeforeClass() {
DriverInit driver = new DriverInit();
}
@Test
public void Test1() {
DriverInit.driver.findElementBy();
Reusable.func1();
}
}
Public class Reusable {
public WebElement r1;
public Reusable() {
r1 = DriverInit.driver.findElementBy(..);
}
public void func1() {
r1.findElementBy(..);
}
}
最佳答案
正如您所说,您可以使用静态驱动程序,但是,是的,如果直接在测试代码级别进行任何并行化,您将面临共享内存问题的风险。
出于这个原因,我避免使用静态驱动程序,这对于可能发展为并行化的测试套件来说是糟糕的设计。在 Selenium 网格中的多个服务器上运行单个进程启动测试是行不通的。
我围绕这种情况设计的方法是在初始化每个页面对象时将驱动程序(在@Before中创建)传递给它们。
如果套件不会增长,您仍然可以使用静态驱动程序,并将多个测试作为单独的作业启动(即单独的 Jenkins 作业,或从命令行单独运行等)
关于java - 我们可以使用静态变量来初始化 selenium webdriver 中的 webdriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23735885/