我有两个Selenium测试一个接一个地运行。我有服务员注入测试,等待元素在与他们交互之前变得可见。 问题是有时候第二次测试是在第一次测试中等待元素加载的过程中开始的。
这是服务员:
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()方法开始的,如果它内部的元素正在等待。
我是否可以确保在第二次测试开始前完成第一次测试?
答案 0 :(得分:0)
假设您正在调用"用@ Test"注释的分隔方法;作为2次硒测试。 只有发生这种情况的可能性是: 测试配置为并行运行。否则它们将始终按顺序运行,检查测试报告以确定故障原因。如果是这样,如果你正在使用testNg,那么只需使用一个名为dependsOnMethods的漂亮属性即可解决它( 实施例
$addr | ForEach-Object {
Start-Job -ScriptBlock { Test-Connection $args[0] } -ArgumentList $_
} | Out-Null
$results = do {
$running = Get-Job -State Running
Get-Job -State Completed | ForEach-Object {
Receive-Job -Job $_
Remove-Job -Job $_
}
} while ($running)
$results | Out-GridView
提示调试:除非指定并行运行,否则测试始终按顺序运行。检查测试报告以确定失败原因。