当我 运行 带有 ChromeDrive Chrome 的测试套件在每次测试时打开

When I run a test suite with ChromeDrive Chrome is opened at every test

我正在尝试对 Appium 驱动程序和 Java、TestNG 使用相同的代码,但是对于 ChromeDriver,我通过添加该代码更改了配置:

File file = new File("C:/QA/Emna/chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
        WebDriver driver = new ChromeDriver();

问题是 chrome window 的任何测试用例都会打开一个新的测试用例,即使我的测试顺序正确且具有 Priority(通过 TestNG)。

有没有办法只用一个window?

WebDriver driver = new ChromeDriver(); 是每次打开新浏览器的内容。将其移至 @BeforeClass 部分并在所有测试中使用相同的实例。

您需要在任何 @Before 类型的 TestNG 方法中移动您的代码片段。假设您的所有测试用例都在 TestNG class 然后

它应该是这样的:

@BeforeClass
public void deSetup(){
        File file = new File("C:/QA/Emna/chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
        WebDriver driver = new ChromeDriver();
}

但如果情况并非如此,我的意思是,您的测试用例分布在多个 TestNG classes 中,那么最好的方法是 Singleton class 加载并初始化 Chrome 驱动程序。调用 Singleton class 的方法以在注释为 @BeforeSuite @BeforeTest@BeforeGroups 的任一方法中实例化 ChromeDriver。并在每个测试 class 中有一个 WebDriver 类型的参考变量,并在 @BeforeClass 方法中将先前初始化的 Chrome 驱动程序分配给该参考变量。

这样,ChromeDriver只会在@BeforeSuite@BeforeTest@BeforeGroups方法中的任何一个运行时实例化一次,并且在每个TestNG中都可用class 一旦 @BeforeClass 运行。

这样你就可以只用一个 Chrome window.

我已经在 @BeforeClass 中通过这种方式解决了我的问题:

@BeforeClass
    public static void before() {
        // check active session
        System.out.println("Becore Test Method");
        File file = new File("C:/QA/Emna/chromedriver.exe");
        System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
        wd = new ChromeDriver();
    }

我做了一个这样的实例:

static WebDriver driver ;

然后在每次测试中我都输入以下内容:

@Test
public static void run1() {
//my tests using wd
}

@Test
public static void run2() {
//my tests using wd
}