Selenium webdriver WebDriver:如何将MarionetedRiver转换为ThreadLocal<;WebDriver>;用于TestNG中的并行测试
有没有办法通过Selenium webdriver WebDriver:如何将MarionetedRiver转换为ThreadLocal<;WebDriver>;用于TestNG中的并行测试,selenium-webdriver,thread-local,firefox-marionette,Selenium Webdriver,Thread Local,Firefox Marionette,有没有办法通过ThreadLocal到marinettedriver来实现WebDriver本地实例的类型转换???我的代码是这样的 public class Base_Class { protected ThreadLocal<WebDriver> Driver = null; @BeforeMethod @Parameters("BrowserName") public void setUp(@Optional("Firefox")
ThreadLocal
到marinettedriver
来实现WebDriver
本地实例的类型转换???我的代码是这样的
public class Base_Class
{
protected ThreadLocal<WebDriver> Driver = null;
@BeforeMethod
@Parameters("BrowserName")
public void setUp(@Optional("Firefox") String BrowserName) throws MalformedURLException
{
Driver = new ThreadLocal<WebDriver>();
if(BrowserName.equalsIgnoreCase("FireFox"))
{
System.setProperty("webdriver.gecko.driver", "..//BrowserDrivers//wires");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
Driver = new <ThreadLocal<WebDriver>> MarionetteDriver(capabilities);
}
else if(BrowserName.equalsIgnoreCase("Chrome"))
{
System.setProperty("webdriver.chrome.driver", "..//BrowserDrivers//chromedriver");
Driver = new <ThreadLocal<WebDriver>>ChromeDriver();
}
}
public WebDriver getDriver()
{
return Driver.get();
}
@AfterMethod
public void closeBrowser()
{
getDriver().quit();
}
}
公共类基类
{
受保护的线程本地驱动程序=null;
@预处理法
@参数(“浏览器名称”)
public void安装程序(@Optional(“Firefox”)字符串BrowserName)引发错误的异常
{
Driver=new ThreadLocal();
if(BrowserName.equalsIgnoreCase(“FireFox”))
{
System.setProperty(“webdriver.gecko.driver”,“.//BrowserDrivers//wires”);
DesiredCapabilities=DesiredCapabilities.firefox();
能力。设置能力(“木偶”,真);
驱动程序=新的木偶河流(能力);
}
else if(浏览器名称.相等信号案例(“Chrome”))
{
System.setProperty(“webdriver.chrome.driver”,“..//BrowserDrivers//chromedriver”);
驱动程序=新的ChromeDriver();
}
}
公共WebDriver getDriver()
{
返回驱动程序get();
}
@后置法
公共浏览器()
{
getDriver().quit();
}
}
所有的测试用例都在单独的类中定义,这些类扩展了这个基础类
获取错误@Driver=新的木偶驱动程序(功能);和驱动器=新的色度驱动器();类型不匹配的行:无法从MarionetteDriver转换为ThreadLocal
我在ubuntu14.04
Os和Selenium版本Selenium-server-standalone-2.53.0上使用Chrome版本52.0.2743.116(64位)
和FireFox版本48.0
希望通过testng.xml
文件实现并行测试执行
非常感谢您的帮助。您需要对代码进行以下更改,以使其能够编译
使用所需功能创建木偶河流对象
和
使用其设置方法在ThreadLocal
对象内设置此驱动程序对象
如下图所示:
if(BrowserName.equalsIgnoreCase("FireFox")) {
System.setProperty("webdriver.gecko.driver", "..//BrowserDrivers//wires");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
// Commented out below line from your code
//Driver = new <ThreadLocal<WebDriver>> MarionetteDriver(capabilities);
Driver.set(new MarionetteDriver(capabilities));
}
if(BrowserName.equalsIgnoreCase(“FireFox”){
System.setProperty(“webdriver.gecko.driver”,“.//BrowserDrivers//wires”);
DesiredCapabilities=DesiredCapabilities.firefox();
能力。设置能力(“木偶”,真);
//注释掉代码下面的行
//驱动程序=新的木偶河流(能力);
Driver.set(新的木偶河流(能力));
}
尝试此操作并让我知道据我所知,您使用ThreadLocal作为驱动程序的原因是什么?Thanks@Grasshopper:我正在尝试通过testng.xml使用WebDriver在不同浏览器实例中通过多线程运行并行测试。。由于驱动程序实例被每个TC覆盖,我对TC的断言在teardown方法中失败。所以我想为每个线程创建一个WebDriver的本地实例来传递TC的断言。感谢并为两人干杯…@Ag_Yoge,如果这对你有帮助,请接受这一回答