0

超级新手在这里。

我正在测试一个返回推文列表的页面,或者如果没有可用的推文,则返回无结果页面。所以我有两个可能的可接受的结果。我正在尝试在 Selenium 2 中编写一个断言来测试任一元素,但如果两者都不出现,则返回错误。

我正在使用页面对象模型,并编写了以下内容:

Assert.assertTrue((iu.twitterUsername().isDisplayed()) || (iu.noData().isDisplayed()), "Page is not loading")

但是,当显示无数据页面时,我的 OR 语句的第一部分中没有找到一个元素。我认为“isDisplayed”的目的是检查元素是否存在。为什么我收到未找到元素的错误?显然它不存在,我想进入我的 OR 语句的第二部分。

当有两个可能的可接受结果时,有没有更好的方法来编写这个?

4

2 回答 2

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 等待元素加载的时间,如下所示,将其更改为 5 秒:

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

或者,您可以创建一个方法来轮询元素,直到达到超时。

于 2013-01-16T05:59:10.160 回答
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));
于 2013-01-16T22:28:09.823 回答