我正在尝试使用与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)。
有没有办法只在一个窗口中工作?
答案 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
}