超级新手在这里。
我正在测试一个页面,该页面要么返回推文列表,要么没有可用的页面,这是一个无结果页面。所以我有两个可能的可接受的结果。我试图在Selenium 2中编写一个断言来测试任一元素,但如果两者都没有出现,则返回错误。
我正在使用页面对象模型,我写了以下内容:
Assert.assertTrue((iu.twitterUsername().isDisplayed()) || (iu.noData().isDisplayed()), "Page is not loading")
但是,当显示no数据页时,我在OR语句的第一部分找不到元素。我认为'isDisplayed'的意思是检查元素是否存在。为什么我找不到元素错误?显然它不在那里,我想进入我的OR语句的第二部分。
当有两种可能的可接受结果时,是否有更好的方法来写这个?
答案 0 :(得分:0)
WebElement.isDisplayed()方法不会告诉您元素是否存在;它告诉你它是否显示在页面上(而不是隐藏)。
您可以使用WebDriver.findElement()方法来测试元素是否已加载;如果没有,它将抛出NoSuchElementException。您的方法可能如下所示:
public static boolean isElementLoaded(WebDriver driver, By findBy) {
try {
driver.findElement(findBy));
} catch (NoSuchElementException e) {
return false;
}
return true;
}
您可以更改WebDriver等待加载元素的时间长度,如下所示,将其更改为五秒:
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
或者,您可以创建一个方法来轮询该元素,直到达到超时。
答案 1 :(得分:0)
应该像
一样简单WebDriver driver = new FirefoxDriver();
WebElement element = driver.findElement(By.id(id));
假设你在寻找我建议使用WebDriverWait的元素之前做了一些事情,那么如果你没有在分配的时间内找到该元素,则抛出并捕获异常。
WebDriverWait wait = new WebDriverWait(driver, 10);
try {
wait.until(ExpectedConditions.elementToBeSelected(By.id(id)));
} catch (ElementNotFound e) {};
element = driver.findElement(By.id(id));