当我使用ChromeDrive运行测试套件时,Chrome会在每次测试时打开

时间:2016-09-22 10:07:07

标签: selenium-webdriver automated-tests testng selenium-chromedriver

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

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

问题是,任何测试用例都会打开一个新窗口,即使我的测试处于正确的优先顺序(通过TestNG)。

有没有办法只在一个窗口中工作?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您需要在任何@Before类型的TestNG方法中移动代码段。让我们说你的所有测试用例都在TestNG

以下是它的外观

@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类中,那么最好的方法是使用Singleton类来加载和初始化ChromeDriver。调用Singleton类的方法,在注释为@BeforeSuite @BeforeTest@BeforeGroups的任何一种方法中实例化ChromeDriver。并且在evelry测试类中有一个WebDriver类型的参考变量,并在@BeforeClass方法中将之前初始化的ChromeDriver分配给此参考变量。

通过这种方式,ChromeDriver只会在@BeforeSuite @BeforeTest@BeforeGroups方法中的任何一个运行时实例化一次,并且会在每个TestNG类中提供一次@BeforeClass运行。

这样,您只能在一个Chrome窗口中使用。

答案 2 :(得分:0)

我已在@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
}