Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 并行执行时,第二个会话将覆盖Selenium测试_Java_Selenium_Cross Browser_Testng_Saucelabs - Fatal编程技术网

Java 并行执行时,第二个会话将覆盖Selenium测试

Java 并行执行时,第二个会话将覆盖Selenium测试,java,selenium,cross-browser,testng,saucelabs,Java,Selenium,Cross Browser,Testng,Saucelabs,在通过Saucelabs跨浏览器执行selenium java测试时,我需要一些帮助来解决这个问题。我正在Jenkins作业中选择的两个浏览器上运行一个测试 在执行过程中,一个测试通过,另一个测试(类似)失败,错误为:504网关超时。服务器没有及时响应。 所以它无法进入下一步 似乎一个测试中断了另一个测试。这两个测试都在各自的通道和线程下运行 Aug 30, 2018 7:17:44 AM org.openqa.selenium.remote.ProtocolHandshake createS

在通过Saucelabs跨浏览器执行selenium java测试时,我需要一些帮助来解决这个问题。我正在Jenkins作业中选择的两个浏览器上运行一个测试

在执行过程中,一个测试通过,另一个测试(类似)失败,错误为:504网关超时。服务器没有及时响应。 所以它无法进入下一步

似乎一个测试中断了另一个测试。这两个测试都在各自的通道和线程下运行

Aug 30, 2018 7:17:44 AM org.openqa.selenium.remote.ProtocolHandshake 
createSession
INFO: Detected dialect: OSS
30-08-2018 07:17:49.235 [TestNG-PoolService-0] INFO  
[com.***.tests.TestBase_Local:96] - Open a site URLDriver: RemoteWebDriver: 
chrome on XP (4f5a5d685f4c44c9a5864e91cb8f11e9)
Driver: RemoteWebDriver: chrome on XP (4f5a5d685f4c44c9a5864e91cb8f11e9)
thread id:14 Timestamp :2018-08-30T07:17:49.370
30-08-2018 07:17:51.912 [TestNG-PoolService-0] INFO  
[com.**.tests.TestBase_Local:35] - Select 'No thanks' on the popup

Aug 30, 2018 7:17:53 AM org.openqa.selenium.remote.ProtocolHandshake 
createSession
INFO: Detected dialect: OSS
30-08-2018 07:17:58.886 [TestNG-PoolService-1] INFO  
[com.**.tests.TestBase_Local:96] - Open a site URLDriver: 
RemoteWebDriver: MicrosoftEdge on ANY (c6978c03531d408485588ba501ff0589)
Driver: RemoteWebDriver: MicrosoftEdge on ANY 
(c6978c03531d408485588ba501ff0589)
thread id:15 Timestamp :2018-08-30T07:17:58.887
30-08-2018 07:18:03.406 [TestNG-PoolService-1] INFO  
[com.**.tests.TestBase_Local:35] - Select 'No thanks' on the popup
30-08-2018 07:18:05.337 [TestNG-PoolService-1] INFO  
[com.**.tests.TestBase_Local:38] - Search by input
共享代码:

公共类搜索扩展了RemoteTestBase{
@测试(dataProvider=“browsers”)
public void SolrSearchTest(字符串浏览器、字符串版本、字符串操作系统、方法)引发异常{
this.createRemoteDriver(browser、version、os、method.getName());
System.out.println(“Driver:+Driver.toString());
应用程序app=新应用程序(驱动程序);
ConfigFileReader configRead=新的ConfigFileReader();
WebDriverWait wait=新的WebDriverWait(驱动程序,100);
app.homePage()。选择nothanks();
Log.info(“在弹出窗口中选择“不感谢”);
app.searchField().SearchBy(configRead.SearchInput());
Log.info(“按输入搜索”);
}
}
扩展的RemoteTestBase类:

公共类RemoteTestBase{
公共网络驱动程序;
私有静态字符串baseUrl;
随机数据选择随机用户;
私有财产领导者财产领导者;
public Logger Log=Logger.getLogger(TestBase_Local.class.getName());
私有静态最终字符串SAUCE_ACCESS_KEY=System.getenv(“SAUCE_ACCESS_KEY”);
私有静态最终字符串SAUCE_USERNAME=System.getenv(“SAUCE_USERNAME”);
@预处理法
@数据提供者(name=“browsers”,parallel=true)
公共静态对象[][]sauceBrowserDataProvider(方法testMethod)抛出JSONException{
String browsersjsonaraystring=System.getenv(“saint_ONDEMAND_BROWSERS”);
System.out.println(浏览器字符串);
JSONArray browsersjsonarayobj=新的JSONArray(browsersjsonaraystring);
Object[][]browserObjArray=新对象[BrowsersJSSonarayObj.length()][3];
对于(int i=0;i类问题在于您的测试代码。它肯定与您的
@test
方法之间的竞争条件有关[您的
@DataProvider
注释中有您的
parallel=“true”
,以及
parallel=“methods”]

您需要重构代码,使
驱动程序
对象是线程安全的

您可以使用以下方法来完成此任务:

  • WebDriver的ThreadLocal变体
  • 创建webdriver实例并将其作为属性注入
    ITestResult
    对象
下面的示例显示如何使用
ThreadLocal
变量使代码线程安全

import java.net.URL;
导入java.util.concurrent.TimeUnit;
导入org.openqa.selenium.remote.DesiredCapabilities;
导入org.openqa.selenium.remote.RemoteWebDriver;
导入org.testng.ITestResult;
导入org.testng.annotations.AfterMethod;
公共类RemoteTestBase{
公共静态最终ThreadLocal驱动程序=新ThreadLocal();
私有静态字符串baseUrl;
私有静态最终字符串SAUCE_ACCESS_KEY=System.getenv(“SAUCE_ACCESS_KEY”);
私有静态最终字符串SAUCE_USERNAME=System.getenv(“SAUCE_USERNAME”);
void createRemoteDriver(字符串浏览器、字符串版本、字符串操作系统、字符串方法名)
抛出异常{
DesiredCapabilities=新的DesiredCapabilities();
等级