Java 当测试并行运行时,Webdriver对象被覆盖
我正在编写基于Java的SeleniumWeb驱动程序测试,以使用testng运行并行跨浏览器测试。 我已将测试设置为在xml文件上并行运行。该文件如下所示:Java 当测试并行运行时,Webdriver对象被覆盖,java,selenium-webdriver,testng,selenium-chromedriver,selenium-firefoxdriver,Java,Selenium Webdriver,Testng,Selenium Chromedriver,Selenium Firefoxdriver,我正在编写基于Java的SeleniumWeb驱动程序测试,以使用testng运行并行跨浏览器测试。 我已将测试设置为在xml文件上并行运行。该文件如下所示: @BeforeSuite方法不应返回某些内容。=>替换为void 您的testng有两个不同的测试,但是@BeforeSuite将始终按套件运行一次,您的评论显示您没有预料到这一点。=>替换为测试前的@BeforeTest 当您在//中运行时,两个线程设置驱动程序值(一个使用firefox,一个使用chrome),这可以解释您的问题
@BeforeSuite
方法不应返回某些内容。=>替换为void
@BeforeSuite
将始终按套件运行一次,您的评论显示您没有预料到这一点。=>替换为测试前的@BeforeTest
public class driverbase {
private String baseUrl;
private String nodeUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
public WebDriver driver;
@BeforeTest
@Parameters("browser")
public void setup(String browser) throws Exception {
if(browser.equalsIgnoreCase("firefox")) {
FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
driver = new FirefoxDriver(profile);
} else if(browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--test-type");
driver = new ChromeDriver(options);
} else {
throw new Exception("Browser is not correct");
}
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
您也应该查看一下。以确保不会将同一个webdriver实例分配给多个测试。创建驱动程序实例的方法应该是同步的。这应该可以解决问题
public synchronized void setup(String browser) throws Exception {
if(browser.equalsIgnoreCase("firefox")) {
FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);
driver = new FirefoxDriver(profile);
} else if(browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver","C:\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--test-type");
driver = new ChromeDriver(options);
} else {
throw new Exception("Browser is not correct");
}
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.manage().window().maximize();
}
你能发布driverbase.java吗?添加了driverbase代码片段看看:我试过了。但没有成功。我能够运行parallel=false的测试。在这种情况下,两个测试都成功运行。在我的示例中,属性不是线程安全的。您可以将它们包装到ThreadLocal中,或者使用@Factory而不是before类方法。使用HashMap找到了一个解决方案。现在我可以并行运行测试了。您可以发布解决方案吗?