当我 运行 带有 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
}
我正在尝试对 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
}