java - 如何在多个浏览器中使用不同的登录并行执行 TestNG.xml

标签 java selenium selenium-webdriver parallel-processing testng

我想在多个浏览器中使用不同的登录并行执行 testng.xml。现在我使用 ThreadLocal 概念,并使用它我可以与单个浏览器(例如 5 个 chrome 驱动程序实例)并行执行 testng.xml。

我想对 IE、firefox、chrome 和 EDGE 等不同的浏览器执行相同的操作。这是我的示例代码。

BaseSetup.class:

public ThreadLocal<WebDriver> driver = new ThreadLocal<WebDriver>()
{
    @Override
      protected WebDriver initialValue()
      {
        if (browser.equalsIgnoreCase("Firefox")) {
            System.setProperty("webdriver.gecko.driver", "D:/Softwares/Selenium/Drivers/Firefox driver/geckodriver.exe");
            return new FirefoxDriver(getFirefoxOptions());
        } else if (browser.equalsIgnoreCase("Chrome")) {
            return new ChromeDriver(getChromeOptions());
        } else if (browser.equalsIgnoreCase("InternetExplorer")) {
            return new InternetExplorerDriver(getInternetExplorerOptions());
        } else if(browser.equalsIgnoreCase("EDGE")){
            return new EdgeDriver(getEdgeOptions());
        }
    }
};

TestNGSuiteRunner.class:

public static void main(String[] args) throws Exception
{
    ArrayList<Thread> trarrls = new ArrayList<Thread>();
    Thread object1 = null;
    try
    {
        inputFiles = args[0];
        xmlFile = inputFiles.split(",");

        for(String file : xmlFile)
        {
             object1 = new Thread(new 
             TestNGParallelConfig(System.getProperty("user.dir")+"/"+file));
             object1.start();
             trarrls.add(object1);
             Thread.sleep(3000);
        }

        for(Thread indi_thread:trarrls){
            indi_thread.join();
        }
    }

    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally{
        System.exit(0);
    }
}

TestNGParallelConfig.class:

public TestNGParallelConfig(String suitXMLUrl,int portNo) throws InterruptedException
{
    xmlString = suitXMLUrl;
    xmlIndex = xmlString.lastIndexOf("/");
    locationName = xmlString.substring(xmlIndex+1);
    folderName = locationName.replace(".xml", "").toUpperCase();
    Thread.sleep(5000);
    //BaseSetup.getInstance().proxyPortNo = portAvailability(portNo);
}

@Override
public void run(){
    List<String> testSuites = Lists.newArrayList();
    testSuites.add(xmlString);
    TestNG testng = new TestNG();
    testng.setTestSuites(testSuites);
    testng.run();
}

最主要的是,如果一个xml要在5个不同的浏览器中运行,就需要5个不同的用户。由于该应用程序完全基于登录和注销。

请帮助我实现这一目标。

最佳答案

尝试 Selenium Grid,Testng.xml 一次在一种浏览器类型上运行。多个浏览器需要浏览器的多次执行或类级别声明,这限制了单个浏览器类型中的一组特定测试用例。如果您想在所有浏览器类型中执行所有测试用例,那么 Selenium Grid 是最好的选择。

关于java - 如何在多个浏览器中使用不同的登录并行执行 TestNG.xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536319/

相关文章:

java - 代码中的AWS Lambda触发器; java

python - 无法用 Selenium 清除 tinymce textarea

java - 如何为 div 和类创建的结账创建 xpath

java - 在Google Tasks API中使用Joda-Time库将字符串转换为DateTime格式

java - 将 Builder 扩展/子类化到直接子级之外

java - 没有合适的驱动程序 java.sql.SQLException

python - 无法使用 selenium webdriver 通过 id 延迟获取元素

c# - 系统.TypeLoadException : Method 'Dispose' in type 'OpenQA.Selenium.Appium.Service.AppiumCommandExecutor'

javascript - Protractor 返回 Promise 而不是属性值

java - 无法单击 Selenium Webdriver 上的按钮(元素)