我正在使用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错误,但我无法弄清楚在哪里或如何。
先谢谢你们!
答案 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"));