testNG并行执行不起作用

时间:2013-11-26 06:38:34

标签: java selenium selenium-webdriver testng

我正在尝试使用testNG对两个浏览器并行运行以下测试,而运行这两个浏览器时都会使用URL启动,但只有一个浏览器会执行完整的测试执行。

这是我的Test Suite类

@Test (groups = {"Enable"}) 
@SuppressWarnings("unused")
public class EETestSuite_01 extends ApplicationFunctions{
    String URL = Globals.GC_EMPTY;

    @BeforeTest
    @Parameters("browser")
    public void loadTest(String browser) throws IOException{
        InitializeTestEnv("EE|BizApp");
        if(browser.equalsIgnoreCase("Firefox"))
               GetBrowser("Firefox");
            else if(browser.equalsIgnoreCase("Chrome")){
               GetBrowser("Chrome");
            }

    }

    @AfterMethod
    public void cleartest() throws InterruptedException{
        driver.close();
        driver.quit();
        driver = null;
    }


    public void TC001_Phone_First_Acquisition_Journey_PAYM() throws InterruptedException{
        URL = EnvDetail.get(Globals.GC_HOME_PAGE);
        Map<String,String> TDChoosePlan = null;
        TDChoosePlan = getData(appName+Globals.GC_TEST_DATA_SHEET,"ChoosePlan",1);
        try{
            launchApp(URL); 
            //driver.navigate().to("javascript:document.getElementById('overridelink').click()");
            EEHomePage homePage = PageFactory.initElements(driver, EEHomePage.class);
            EEShopPage shopPage = homePage.GetToShopPage();
            EEPhoneMatrixPage phonePage = shopPage.GetToPhoneMatrixPage();
            EEChoosePlanPage planPage = phonePage.ChoosePhone("NokiaLumia1020"); // Implement select phone
            EEAddonsPage addonPage = planPage.SelectPhonesPlan(TDChoosePlan);
            EEBasket basketPage = addonPage.GoToBasketPage();
            EESecureCheckOut secureChkOutPage = basketPage.GoToSecureCheckOutPage();
            secureChkOutPage.ChooseNonExistingCustomer();
            EEConfirmation confPage = secureChkOutPage.FillUserRegisterForm(2);
        }catch(Exception e){
            e.printStackTrace();
        }       
    }


}

我的XML看起来像这样

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "EEAutomationTestSuite" verbose="2" parallel = "tests" thread-count="100">

<test name="PAYM Acquisition in Chrome">
  <parameter name="browser" value="Firefox"></parameter>
   <classes>
     <class name="com.testsuite.EETestSuite_01">
    </class>
  </classes>
</test>

<test name="PAYM Acquisition in FF">
  <parameter name="browser" value="Firefox"></parameter>
   <classes>
     <class name="com.testsuite.EETestSuite_01">
    </class>
  </classes>
</test>
</suite>

我的主页代码是

*/  public EEShopPage GetToShopPage() throws InterruptedException{

       // longWait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(OR.getProperty("wblShopHeader"))));   
        lblShopHeader = driver.findElement(By.cssSelector(OR.getProperty("wblShopHeader")));
        Actions builder = new Actions(driver); 
        Actions hoverOverRegistrar = builder.moveToElement(lblShopHeader);
        hoverOverRegistrar.perform();Thread.sleep(10000);
        lnkStartShopping = driver.findElement(By.cssSelector(OR.getProperty("lnkStartShopping")));
        mediumWait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(OR.getProperty("lnkStartShopping"))));
        lnkStartShopping.click();
        return PageFactory.initElements(driver,EEShopPage.class );
    }
}

这是驱动程序

public static void GetBrowser(String browser){
        try{
            if (browser.equalsIgnoreCase("firefox")) {              
//              FirefoxProfile firefoxProfile = new FirefoxProfile();
//              File pathToBinary = new File(Globals.GC_FIREFOX_BIN_PATH);
//              FirefoxBinary ffBinary = new FirefoxBinary(pathToBinary);
                //firefoxProfile.setPreference("webdriver.load.strategy","unstable");
                driver = new FirefoxDriver();
            } else if (browser.equalsIgnoreCase("iexplorer")){
                System.setProperty("webdriver.ie.driver", System.getProperty("user.dir") + 
                                   "//resource//drivers//IEDriverServer.exe");          
                DesiredCapabilities capabilities = new DesiredCapabilities(); 
                capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
                driver = new InternetExplorerDriver(capabilities);
            } else if (browser.equalsIgnoreCase("chrome")){
                System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + 
                                   "//resource//drivers//chromedriver.exe");

我只是猜测主页中有一个悬停动作,对于一个浏览器它可以正常工作,但对于其他没有任何反应......它是否应该引起焦点问题?

请通过示例

告诉我如何解决这个问题

1 个答案:

答案 0 :(得分:1)

我无法从您的代码中获取它,您正在使用哪个构造函数用于您的页面对象EEHomePage

因为,如果您使用默认构造函数,那么您的PageFactory将无法初始化您的Web元素,除非它们由@FindBy注释定义,

PageFactory将webDriver和Object类作为参数,并使用提供的webDriver在内部初始化该Object类。这可以通过以下两种方式实现:

1)使用@FindBy注释在pageObjects中定义webElements,如下所示:

 @FindBy(css=//your locator value here)
    private WebElement lblShopHeader;

OR

2)定义构造函数并通过PageFactory提供的webdriver初始化你的pageobject webdriver如下:

EEHomeShop(WebDriver driver){

   this.driver=driver;

  }