我想在Chrome中运行多个测试。即2个测试在2个Chrome中并行进行。我确实有一个由POM(testing.xml)定义的Maven项目:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="mytestsuite" parallel="tests" >
<test name="case1">
<classes>
<class name="Testcases.hello1Test"></class>
</classes>
</test>
<test name="case2">
<classes>
<class name="Testcases.hello2.Test"></class>
</classes>
</test>
</suite>
调用浏览的代码在我的 baseTest 中:
public hello1Page1 hellopage1;
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", chromePrefs);
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setJavascriptEnabled(true);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
chromePath = System.getProperty("user.dir") + prop.getProperty("driverrPath");
System.setProperty("webdriver.chrome.driver", chromePath);
driver = new ChromeDriver(options);
driver.get(Prop.getProperty("URL"));
hellopage1 = PageFactory.initElements(driver, helloPage1.class);
这是网页课程:
public class hello1Page extends BaseTest {
WebDriver driver;
public hello1Page(WebDriver driver){
this.driver = driver;
}
public hello1Page method1 {... return this;}
public hello1Page method2 {... return this;}
}
这是测试课程:
public class hello1Test extends BaseTest
{
@Test(priority = 0)
public void methodT1(){
hello1page.method1();
}
}
我还有其他遵循相同模式的测试。
我假设是当我运行testng.xml
时,它应该进入baseTest 2次并打开2个chrome,然后在单独的chrome中运行我的2个测试。但是,这并没有发生。它仅打开1个chrome浏览器,并且仅运行1个测试。
通常,一切正常,就像使用maven命令运行单个测试用例一样,但问题在于并行。
答案 0 :(得分:0)
我希望这是根本原因
hellopage1 = PageFactory.initElements(driver, helloPage1.class);
在BaseTest中。
在Pages中声明
WebDriver driver;
也
public className(WebDriver driver){
this.driver = driver;
}
在测试用例中
WebDriver driver;
PageClassName obj;
@Test(priority=0)
public void test(){
//Create Login Page object
objLogin = new PageClassName(driver);
答案 1 :(得分:0)
列表项 请尝试以下步骤:-
创建像这样的Threadsafe Webdriver实例:
私有静态ThreadLocal webDriver = new ThreadLocal();
使用getter和setter来使用像这样的驱动程序:-
公共静态WebDriver getDriver(){ 返回webDriver.get(); }
static void setWebDriver(WebDriver驱动程序){ webDriver.set(驱动程序); }
希望这会有所帮助。谢谢!请参阅此以获取更多信息-https://rationaleemotions.wordpress.com/2013/07/31/parallel-webdriver-executions-using-testng/