2017-01-19 60 views
1

我有两个硒测试一个接一个地运行。我有服务员注入测试,等待元素在与它们交互之前变得可见。 问题是,有时第二次测试正在等待元素在第一次测试中加载期间开始。第二次硒测试在第一次测试完成之前开始

这是服务员:

public void waitElementIsVisible(String locator) { 
    logger.info("Waiting for element with locator " + locator + " to load in " + driver.getCurrentUrl() + " page"); 
    WebDriverWait wait = new WebDriverWait(driver, 15, 100); 
    WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(locator))); 
} 

这是一个使用服务员方法:

protected void clickJs(String locator){ 
    waiters.waitElementIsVisible(locator); 
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    WebElement el = findPageElementByXpath(locator); 
    js.executeScript("arguments[0].click();", el); 
} 

这是一个使用JavaScript方法点击上面说:

public ActivitiesPage goToActivitiesPage(){ 
    clickJs(activitiesPage); 
    return new ActivitiesPage(); 
} 

而这些测试:

@Test 
public void doSuccessfulLoginTest(){ 
    LoginPage page = new LoginPage(); 
    page.doSuccessfulLogin("[email protected]", "qwerty"). 
    goToActivitiesPage(). 
      goToSignUpFormsPage(). 
    clickCreateSignupFormButton(). 
    specifySignUpFormName(Helper.getCurrentDateAndTime()). 
    clickNextButton(). 
    selectLayout(). 
    clickNextButton(). 
    clickNextButton(). 
    clickNextButton(); 

    try { 
     System.out.println("assertions"); 
     Assert.assertEquals(getDriver().getCurrentUrl().contains("dashboard"), true); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

@Test 
public void doSuccessfulLoginTestAndPublishSignupForm(){ 
    ActivitiesPage ap = new ActivitiesPage(); 
    ap.goToSignUpFormsPage(). 
    clickCreateSignupFormButton(). 
    specifySignUpFormName(Helper.getCurrentDateAndTime()). 
    clickNextButton(). 
    selectLayout(). 
    clickNextButton(). 
    clickNextButton(). 
    clickNextButton(); 

    try { 
     System.out.println("assertions"); 
     Assert.assertEquals(getDriver().getCurrentUrl().contains("subscribe"), true); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

第二个测试开始于goToActivitiesPage()第一个测试方法,如果它里面的元素正在等待。

我可以确保在第二次启动之前完成第一次测试吗?

+0

您没有提供测试方法,但是如果您没有并行运行它们,如果第二次测试开始,则意味着第一次测试结束。原因可能是'waitElementIsVisible'方法中的一个例外。 – Guy

+0

您可以添加代码吗?将明确识别问题。 – NarendraR

+0

在说明中增加了代码 –

回答

0

假设您正在调用“用@Test注释的分离方法”作为2个硒测试。 唯一可能发生的情况是: 测试配置为并行运行。否则它们将始终按顺序运行,检查测试报告以确定故障原因。如果是这样,如果你使用的是TestNG的话,就可以简单地通过使用名为dependsOnMethods( 防爆美丽的财产的1解决

@Test 
public void test1() {} 

@Test(dependsOnMethods = {"test1"}) //test2 will wait until test1 is finished 
public void test2() {} 

提示调试:除非指定的并行运行,测试总是顺序运行。检查测试报告以确定失败原因