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和TestNg并行运行并没有将驱动程序附加到我们启动的每个浏览器上,即使我使用了ThreadLocal概念_Java_Selenium - Fatal编程技术网

Java Selenium和TestNg并行运行并没有将驱动程序附加到我们启动的每个浏览器上,即使我使用了ThreadLocal概念

Java Selenium和TestNg并行运行并没有将驱动程序附加到我们启动的每个浏览器上,即使我使用了ThreadLocal概念,java,selenium,Java,Selenium,我使用下面的代码来获得并行运行的工作,但不幸的是,它不工作,有人可以帮助我在这方面 public EmergyaWebDriver initialize() { log.info("[log-Properties] " + this.getClass().getName() + "- Start initialize test"); tmpDriver = new ThreadLocal<RemoteWebDriver>();

我使用下面的代码来获得并行运行的工作,但不幸的是,它不工作,有人可以帮助我在这方面

    public EmergyaWebDriver initialize() {
        log.info("[log-Properties] " + this.getClass().getName() + "- Start initialize test");

        tmpDriver = new ThreadLocal<RemoteWebDriver>();

        // EmergyaWebDriver tmpDriver = null;

        // Driver initialization
        if (browser.equalsIgnoreCase("Firefox")) {

            FirefoxProfile firefoxProfile = new FirefoxProfile();

            firefoxProfile.setPreference("browser.download.manager.focusWhenStarting", true);
            firefoxProfile.setEnableNativeEvents(true);
            firefoxProfile.setPreference("browser.download.folderList", 2);
            firefoxProfile.setPreference("browser.download.manager.showWhenStarting", false);
            firefoxProfile.setPreference("browser.download.dir", this.getDownloadPath());

            File dir = new File(this.getDownloadPath());
            if (dir.isDirectory()) {
                File[] files = dir.listFiles();

                for (File file : files) {
                    if (file.isFile()) {
                        file.delete();
                    }
                }
            }

            String mimeTypes = getMimeTypes();

            // adding mimetypes
            firefoxProfile.setPreference("browser.helperApps.neverAsk.saveToDisk", mimeTypes);
            // forcing the downloads
            firefoxProfile.setPreference("browser.helperApps.neverAsk.openFile", mimeTypes);
            firefoxProfile.setPreference("browser.helperApps.alwaysAsk.force", false);

            firefoxProfile.setPreference("pdfjs.disabled", true);

            // EmergyaFirefoxDriver tmpDriver = new firefoxProfile(firefoxProfile);

            DriverManager manager = new DriverManager();
            manager.setWebDriver(driver = new EmergyaFirefoxDriver(firefoxProfile));
}
}


public class DriverManager {
    private static ThreadLocal<EmergyaWebDriver> EmergyaWebDriver = new ThreadLocal<EmergyaWebDriver>();

    public static EmergyaWebDriver getDriver() {
        return EmergyaWebDriver.get();
    }

    public void setWebDriver(EmergyaWebDriver driver) {
        EmergyaWebDriver.set(driver);
    }
}
public EmergyaWebDriver initialize(){
log.info(“[log Properties]”加上this.getClass().getName()+“-Start initialize test”);
tmpDriver=新的ThreadLocal();
//EmergyaWebDriver tmpDriver=null;
//驱动程序初始化
if(browser.equalsIgnoreCase(“Firefox”)){
FirefoxProfile FirefoxProfile=新的FirefoxProfile();
firefoxProfile.setPreference(“browser.download.manager.focuswhen启动”,true);
firefoxProfile.SetEnableActivieEvents(真);
firefoxProfile.setPreference(“browser.download.folderList”,2);
firefoxProfile.setPreference(“browser.download.manager.showWhenStarting”,false);
firefoxProfile.setPreference(“browser.download.dir”,this.getDownloadPath());
File dir=新文件(this.getDownloadPath());
if(dir.isDirectory()){
File[]files=dir.listFiles();
用于(文件:文件){
if(file.isFile()){
delete();
}
}
}
字符串mimeTypes=getMimeTypes();
//添加mimetype
firefoxProfile.setPreference(“browser.helperApps.neverAsk.saveToDisk”,mimeTypes);
//强制下载
firefoxProfile.setPreference(“browser.helperApps.neverAsk.openFile”,mimeTypes);
firefoxProfile.setPreference(“browser.helperApps.alwaysAsk.force”,false);
firefoxProfile.setPreference(“pdfjs.disabled”,true);
//EmergyaFirefoxDriver tmpDriver=新的firefoxProfile(firefoxProfile);
DriverManager=new DriverManager();
manager.setWebDriver(driver=new-EmergyaFirefoxDriver(firefoxProfile));
}
}
公共类驱动程序管理器{
私有静态ThreadLocal EmergyaWebDriver=新ThreadLocal();
公共静态EmergyaWebDriver getDriver(){
返回EmergyaWebDriver.get();
}
公共无效setWebDriver(EmergyaWebDriver){
EmergyaWebDriver.set(驱动程序);
}
}

我要做的是,我有四个独立的类来处理我的浏览器:

镀铬厂:

public class ChromeDriverFactory {

    public ThreadLocal<WebDriver> driver;
    private Set<WebDriver> drivers = Collections.newSetFromMap(new ConcurrentHashMap<>());

    public ChromeDriverFactory(Boolean isHeadless) throws IOException
     {
        System.setProperty("webdriver.chrome.driver", TestUtils.getRelativePath() + "/externalLibraries/browsers/chromedriver");
        System.setProperty("java.awt.headless", Boolean.toString(isHeadless));
        DesiredCapabilities caps = DesiredCapabilities.chrome();
        caps.setJavascriptEnabled(true);
        caps.setCapability("takesScreenshot", true);
        ChromeOptions options = new ChromeOptions();
        if (isHeadless)
        {
            options.addArguments("headless");
            options.addArguments("disable-gpu");
            //options.addArguments("no-sandbox");
        }
        options.addArguments("disable-extensions");
        caps.setCapability(ChromeOptions.CAPABILITY, options);

        driver = new InheritableThreadLocal<WebDriver>(){
            @Override
            protected ChromeDriver initialValue() {
                ChromeDriver chromeDriver = new ChromeDriver(caps);
                drivers.add(chromeDriver);
                return chromeDriver;
            }
        };
    }

}
public class LocalDriverFactory {

    public static WebDriver createInstance(String browserName, Boolean isHeadless) throws IOException {

        WebDriver driver = null;
        if (browserName.toLowerCase().contains("firefox")) {

        }
        if (browserName.toLowerCase().contains("internet")) {
            /*driver = new InternetExplorerDriver();
            return driver;*/
        }
        if (browserName.toLowerCase().contains("chrome")) {
            ChromeDriverFactory cFac = new ChromeDriverFactory(isHeadless);
            driver = cFac.driver.get();
        }
        if (browserName.toLowerCase().trim().equals("safari"))
        {
           /* driver = SafariDriverFactory.driver.get();
            LocalDriverManager.setFFWebDriver(driver);*/
        }
        if (browserName.toLowerCase().trim().contains("phantom"))
        {
            java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
        }
        return driver;
    }
}
和LocalDriverManager:

公共类LocalDriverManager{

private static ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>();

public static WebDriver getDriver() {
    return driver.get();
    /*driver = chromeWebDriver.get();
    if (driver == null)
    {
        driver = ffWebDriver.get();
    }
    */
}

public static void setDriver(WebDriver indriver)
{
    driver.set(indriver);
}
您的测试应该调用xml文件中的侦听器,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" thread-count="4" parallel="methods">
 <listeners>
        <listener class-name="[PATH TO THE WebDriverListener CLASS SEPARATED BY .]WebDriverListener"/>
 </listeners>
  <test name="Regression">
    <classes>
        <class name="[PATH TO THE TEST CLASS SEPARATED BY .]SomeTestClass"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

然后通过testng运行该xml文件。这对我很有用。它打开4个浏览器,并在这4个浏览器实例中同时执行4个单独的测试方法


注意:您必须确保绝对没有全局静态变量。所有内容都必须是线程安全的(如浏览器实例)。

@Trinadh Kumar关于“findelelement引发的WebDriverException(by.xpath://img[@pc id='logo big'])org.openqa.selenium.NoSuchSessionException:没有这样的会话”正在发生错误。有时,当您的Chromedriver版本过时时,会发生这种情况。请尝试从下载并使用最新版本。最新版本为2.30。

请与链接联系,我已实现上述概念,启动浏览器并附加相关驱动程序,但我遇到以下错误,测试正在进行中正在运行的iling还观察到,当一个测试完成时,所有浏览器都将关闭…请提供任何线索…*********************************************************************************************************************************************************org.jdom.input.jdoParseException:第89行错误:尾随部分不允许内容。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" thread-count="4" parallel="methods">
 <listeners>
        <listener class-name="[PATH TO THE WebDriverListener CLASS SEPARATED BY .]WebDriverListener"/>
 </listeners>
  <test name="Regression">
    <classes>
        <class name="[PATH TO THE TEST CLASS SEPARATED BY .]SomeTestClass"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->