Testng仅打开一个浏览器进行并行配置

时间:2019-01-21 12:47:18

标签: java selenium-webdriver testng

我想在Chrome中运行多个测试。即2个测试在2个Chrome中并行进行。我确实有一个由POM(testing.xml)定义的Maven项目:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="mytestsuite" parallel="tests" >
    <test name="case1">
        <classes>
            <class name="Testcases.hello1Test"></class>
        </classes>
    </test>

    <test name="case2">
        <classes>
            <class name="Testcases.hello2.Test"></class>
        </classes>
    </test>

</suite>

调用浏览的代码在我的 baseTest 中:

    public hello1Page1 hellopage1;
    HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("prefs", chromePrefs);
    DesiredCapabilities cap = DesiredCapabilities.chrome();
    cap.setJavascriptEnabled(true);
    cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    cap.setCapability(ChromeOptions.CAPABILITY, options);
    chromePath = System.getProperty("user.dir") + prop.getProperty("driverrPath");
    System.setProperty("webdriver.chrome.driver", chromePath);
    driver = new ChromeDriver(options);
    driver.get(Prop.getProperty("URL"));

hellopage1 = PageFactory.initElements(driver, helloPage1.class);

这是网页课程:

public class hello1Page extends BaseTest {
    WebDriver driver;

    public  hello1Page(WebDriver driver){
        this.driver = driver;
    }

    public hello1Page method1 {... return this;}
    public hello1Page method2 {... return this;}
}

这是测试课程:

public class hello1Test extends BaseTest
{
    @Test(priority = 0)
    public void methodT1(){
            hello1page.method1();
    }
}

我还有其他遵循相同模式的测试。

我假设是当我运行testng.xml时,它应该进入baseTest 2次并打开2个chrome,然后在单独的chrome中运行我的2个测试。但是,这并没有发生。它仅打开1个chrome浏览器,并且仅运行1个测试。

通常,一切正常,就像使用maven命令运行单个测试用例一样,但问题在于并行。

2 个答案:

答案 0 :(得分:0)

我希望这是根本原因

  hellopage1 = PageFactory.initElements(driver, helloPage1.class);

在BaseTest中。

在Pages中声明

 WebDriver driver;

public className(WebDriver driver){

    this.driver = driver;

}

在测试用例中

 WebDriver driver;

 PageClassName obj;


  @Test(priority=0)

public void test(){

    //Create Login Page object

objLogin = new PageClassName(driver);

答案 1 :(得分:0)

  • 列表项 请尝试以下步骤:-

    1. 创建像这样的Threadsafe Webdriver实例:

      私有静态ThreadLocal webDriver = new ThreadLocal();

    2. 使用getter和setter来使用像这样的驱动程序:-

      公共静态WebDriver getDriver(){ 返回webDriver.get(); }

    static void setWebDriver(WebDriver驱动程序){     webDriver.set(驱动程序); }

    1. 添加线程数= 2(TestNg xml文件),如下所示:-

希望这会有所帮助。谢谢!请参阅此以获取更多信息-https://rationaleemotions.wordpress.com/2013/07/31/parallel-webdriver-executions-using-testng/