Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们可以在SeleniumWeb驱动程序中使用静态变量初始化驱动程序吗_Java_Selenium_Webdriver - Fatal编程技术网

Java 我们可以在SeleniumWeb驱动程序中使用静态变量初始化驱动程序吗

Java 我们可以在SeleniumWeb驱动程序中使用静态变量初始化驱动程序吗,java,selenium,webdriver,Java,Selenium,Webdriver,我们有一个静态变量来初始化SeleniumWebDriver中的驱动程序 公共静态WebDriver 该变量在一个类(DriverInit)中声明,并在各种测试计划(测试类)的“@BeforeClass”中初始化。初始化变量(驱动程序)将在整个项目的各种可重用函数和@test方法中使用。驱动程序将在@QAfterClass关闭/退出 这适用于脚本的非并行执行。使用静态变量初始化驱动程序是否会以任何方式影响并行执行 例如: 对驱动程序实例使用static是不正确的。 最好创建get_方法将驱动程序

我们有一个静态变量来初始化SeleniumWebDriver中的驱动程序

公共静态WebDriver

该变量在一个类(DriverInit)中声明,并在各种测试计划(测试类)的“@BeforeClass”中初始化。初始化变量(驱动程序)将在整个项目的各种可重用函数和@test方法中使用。驱动程序将在@QAfterClass关闭/退出

这适用于脚本的非并行执行。使用静态变量初始化驱动程序是否会以任何方式影响并行执行

例如:


对驱动程序实例使用static是不正确的。 最好创建get_方法将驱动程序返回到另一个类

public class DriverInit { (using remote webdriver, browser name will be read from XML)
private WebDriver driver;

public WebDriver getDriver() {
switch (browser) {
case "IE" : driver = ....
case "Firefox" : driver = ....
return driver;
}
}

public class TestClass {
private Webdriver driver;
@BeforeClass
public void BeforeClass() {
DriverInit driveInit= new DriverInit();
driver=driveInit.getDriver();
}

@Test
public void Test1() {
Reusable reusable = new Reusable();
reusable.func1Click(driver);
}
}

public class Reusable {

public void func1Click(WebDriver driver) {
driver.findElementBy(..).click();
}
}

对驱动程序实例使用static是不正确的。 最好创建get_方法将驱动程序返回到另一个类

public class DriverInit { (using remote webdriver, browser name will be read from XML)
private WebDriver driver;

public WebDriver getDriver() {
switch (browser) {
case "IE" : driver = ....
case "Firefox" : driver = ....
return driver;
}
}

public class TestClass {
private Webdriver driver;
@BeforeClass
public void BeforeClass() {
DriverInit driveInit= new DriverInit();
driver=driveInit.getDriver();
}

@Test
public void Test1() {
Reusable reusable = new Reusable();
reusable.func1Click(driver);
}
}

public class Reusable {

public void func1Click(WebDriver driver) {
driver.findElementBy(..).click();
}
}

当您将字段定义为
static
时,每个线程都可以访问该字段,并且每个线程都可以修改该内存空间。这就是为什么我怀疑是否有可能使用定义为
static
的webdriver实例。但是,您可以考虑使用,以便在不同的浏览器上运行多个测试。

< P>当您将字段定义为“代码>静态< /代码>时,那么每个线程都可以访问它,并且每个线程都可以修改该内存空间。这就是为什么我怀疑是否有可能使用定义为
static
的webdriver实例。但是您可以考虑使用,以便在不同的浏览器上运行多个测试。

使用定义Web驱动程序的Sigelon类,


然后在其他类中使用相同的实例

使用定义webDriver的Singleton类,
然后在其他类中使用相同的实例

正如您所说的,您可以使用静态驱动程序,但是,是的,如果您直接在测试代码级别执行任何并行化,您将面临共享内存问题的风险

正因为这个原因,我避免使用静态驱动程序,对于可能发展为并行化的测试套件来说,这是一个糟糕的设计。在selenium网格中的多个服务器上运行单个进程启动测试将不起作用

我针对这种情况设计的方法是在初始化每个页面对象时将驱动程序(在@Before中创建)传递给它们


如果套件不会增长,您仍然可以使用静态驱动程序,并作为单独的作业启动多个测试(即单独的Jenkins作业或从命令行单独运行等)

如您所述,您可以使用静态驱动程序,但是,是的,如果您直接在测试代码级别执行任何并行化,您将面临共享内存问题的风险

正因为这个原因,我避免使用静态驱动程序,对于可能发展为并行化的测试套件来说,这是一个糟糕的设计。在selenium网格中的多个服务器上运行单个进程启动测试将不起作用

我针对这种情况设计的方法是在初始化每个页面对象时将驱动程序(在@Before中创建)传递给它们


如果套件不会增长,您仍然可以使用静态驱动程序,并作为单独的作业启动多个测试(即单独的Jenkins作业,或从命令行单独运行等)

为了避免并行执行问题,静态驱动程序实例能否以线程安全的方式使用?为了避免并行执行问题,静态驱动程序实例能否以线程安全的方式使用?