在第一次测试完成之前开始第二次硒测试.



我有两个硒测试要一个接一个地运行。我让服务员被注入测试中,等待元素变得可见,然后再与它们互动。问题是有时第二个测试在等待元素加载第一个测试期间开始。

这是服务员:

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() {}

调试提示:除非指定并行运行,否则测试始终按顺序运行。 检查测试报告以确定故障原因。

最新更新