我有两个硒测试要一个接一个地运行。我让服务员被注入测试中,等待元素变得可见,然后再与它们互动。问题是有时第二个测试在等待元素加载第一个测试期间开始。
这是服务员:
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("ir2.0bb16be1@mailosaur.in", "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()方法开始,如果正在等待其中的元素,则第一次测试。
我是否可以确保在第二个测试开始之前完成第一个测试?
假设您将"用@Test注释的分离方法"称为 2 个硒测试。发生这种情况的唯一可能性是:测试配置为并行运行。否则,它们将始终按顺序运行,检查测试报告以确定故障原因。如果是这样,并且如果您使用的是testNg,那么只需使用称为dependsOnMethods的美丽属性之一即可解决它(前任。
@Test
public void test1() {}
@Test(dependsOnMethods = {"test1"}) //test2 will wait until test1 is finished
public void test2() {}
调试提示:除非指定并行运行,否则测试始终按顺序运行。 检查测试报告以确定故障原因。