为什么我的ExpectedConditions命令被忽略? Java中的Selenium WebDriver

时间:2017-11-10 11:22:44

标签: java selenium selenium-webdriver cucumber

我正在使用Cucumber和Selenium WebDriver来测试一个应用程序,我刚刚注意到我的测试正在传递一个特定的区域,无论我把它放在" ExpectedConditions.textToBe"的参数中。方法

这部分测试简单检查在测试添加用户后,正确的文本出现在用户角色表中:

    public void admin_can_see_the_new_role_in_the_list() throws Throwable {
    // Write code here that turns the phrase above into concrete actions
    //throw new PendingException();
    Thread.sleep(3000);
    ExpectedConditions.textToBe(By.xpath("//*[@id=\"role-nbbbamze\"]"), "account manasdfsdfger");
    ExpectedConditions.textToBe(By.xpath("//*[@id=\"app\"]/dizz/dib[2]/divz/div[2]zzz/table/tbody/tr[11]/td[2]"), "Accmasfsdnager");
    ExpectedConditions.textToBe(By.xpath("//*[@id=\"app\"]/dbiv/div[2]/div/dziv[2]/tzable/tzzzbody/tr[11]/td[3]"), "Can acvfcess the normal dashboard");
}

正如您所看到的,我在参数中添加了随机字符,测试运行并仍然通过。它应该失败,因为我定义的xpath不存在 - 或者我声明的文本与该xpath中的任何内容都不匹配。

我显然使用了ExpectedConditions错误,但我无法弄清楚在哪里或如何。

先谢谢你们!

2 个答案:

答案 0 :(得分:4)

您必须将其与等待对象结合使用,例如:

WebDriverWait wait = new WebDriverWait(driver, 60); 
wait.until(ExpectedConditions.textToBe(By.xpath("//*[@id=\"app\"]/dbiv/div[2]/div/dziv[2]/tzable/tzzzbody/tr[11]/td[3]"), "Can acvfcess the normal dashboard"));

答案 1 :(得分:1)

在这里你需要考虑以下几点:

  • 您似乎试图诱导WebDriverWait,因此您可以移除Thread.sleep(3000);
  • ExpectedConditions 必须与 WebDriverWait 的实例绑定,例如 wait 以及 until 子句如下:

    WebDriverWait wait = new WebDriverWait(driver, 10); 
    wait.until(ExpectedConditions.textToBe(By.xpath("//*[@id=\"app\"]/dbiv/div[2]/div/dziv[2]/tzable/tzzzbody/tr[11]/td[3]"), "Can acvfcess the normal dashboard"));
    
  • 现在,最重要的一点是, textToBe 子句会返回 boolean 。因此,我们检查了返回的 Boolean Status 以及以下内容:

    WebDriverWait wait = new WebDriverWait(driver, 10); 
    Boolean bool = wait.until(ExpectedConditions.textToBe(By.xpath("//*[@id=\"app\"]/dbiv/div[2]/div/dziv[2]/tzable/tzzzbody/tr[11]/td[3]"), "Can acvfcess the normal dashboard"));