java - 让驱动程序等待条件为真并在条件为假时继续的最佳方法是什么?

标签 java selenium selenium-webdriver webdriver testng

我正在自动化的工作流程是为了生成报告。每次生成报告都需要 X 的时间(即可能需要 10-50 秒)。如果 ExpectedCondition 没有发生,我想不出让驱动程序等到报告生成并继续的好方法。目前,我可以通过要求驱动程序寻找预期条件“您的报告已完成s”来故意使测试失败,但问题是它不会从这里继续到 try catch。这是它将运行的最后一行。

工作流程: 我开始报告的主页 -> 报告生成器弹出窗口(最多等待 50 秒) -> 两种可能的情况: 1.“另一个报告正在运行,稍后再试。” 2.“您的报告已完成”

我的 Selenium 代码:

//explicit wait
WebDriverWait wait = new WebDriverWait(driver, 50);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(),'" + "Your Report is complete" + "')]")));



try{

    Assert.assertTrue(driver.getPageSource().contains("Your Report is complete."));
    log.info("Your report was generated."); 
}

catch(AssertionError ex){
    log.error("Your report was not generated.");
    throw ex;

}
finally {
    driver.close();
    // change focus back to old tab
    driver.switchTo().window(oldTab);
    Thread.sleep(3000);
}

页面生成报表成功时的页面源代码:

<html>
    <HEAD>
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
        <TITLE>Generating report</TITLE>
        <style type="text/css" media="screen">
            @import url("public/css/main-new.css");
        </style>

        <script type="text/javascript" src="public/js/jquery.js"></script>

        <script type="text/javascript" src="public/js/Modal/prototype.js" ></script>
        <script type="text/javascript" src="public/js/Modal/scriptaculous.js?load=builder,effects" ></script>
        <script type="text/javascript" src="public/js/Modal/modalbox.js" ></script>
        <script type="text/javascript" src="public/js/tooltip.js" ></script>
        <link rel="stylesheet" href="public/css/modalbox.css" type="text/css" media="screen" />
        <link rel="stylesheet" href="public/css/tooltip.css" type="text/css" media="screen" />
        <script language="javascript" type="text/javascript" src="JSUtility.js"></script>

    </HEAD>
    <body style="margin: 25px;">
        <form method="post" action="LaunchReport.asp" id=form1 name=form1>
            <input type="hidden" name="REPORT" value="3diFevJrtGSy9AhdaEtY8Lh5N.xls">
            <input type="hidden" name="REPORTFINAL" value="3diFevJrtGSy9AhdaEtY8Lh5N.xls">
            <input type="hidden" name="PPVS" value="CELL5572">
            <input type="hidden" name="TYPE" value="AUDIT">
            <input type="hidden" name="CLASS" value="DEFINED">
            <input type="hidden" name="T" value="3">
            <input type="hidden" name="MT" value="540">

        </form>

            <p><b><font class="mdtext">Your Report is complete.</b></font></p>
            <p><font class="mdtext">Preparing to download....<br></font></p>
            <SCRIPT>
document.form1.submit();</SCRIPT>

    </body>
</html>

谢谢!

最佳答案

我会做这样的事情:

WebDriverWait wait = new WebDriverWait(driver, 50);

try {
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(),'" + "Your Report is complete" + "')]")));
    // If you get here, the condition did not timeout and so the
    // report was generated.
    log.info("Your report was generated.");
}
catch (TimeoutException ex) {
    // Timed out, the report was not generated.
    log.error("Your report was not generated.");
    throw ex;
}
finally {
    driver.close();
    // change focus back to old tab
    driver.switchTo().window(oldTab);
    Thread.sleep(3000);
}

如果您必须生成一个AssertionError,您总是可以在 catch 子句中这样做:

catch (TimeoutException ex) {
    // Timed out, the report was not generated.
    log.error("Your report was not generated.");
    Assert.assertTrue(false);
}

关于java - 让驱动程序等待条件为真并在条件为假时继续的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417642/

相关文章:

python - 如何在 chrome webdriver 中禁用密码管理器

java - 如何比较下拉选项与 Selenium WebDriver 中的 UI 选项是否匹配?

java - 什么时候我们会直接扩展java.lang.Error?

java - Jboss 7 getResourcesAsStream()

java - 如何使用 Selenium 和 Java 填写 yahoo 登录页面中的用户名和密码字段

javascript - 访问 Selenium WebDriver 中的 window.external 函数

javascript - Protractor 未连接到 DevTools

java - MapReduce-Java:计算数组列表的平均值

Java/Android : Get Facebook User Info From Graph Api, 在TextView中显示

selenium - VS 2017 中的关联测试用例显示错误未连接到项目,但我是