如何使用Selenium 2寻找两个潜在元素?

时间:2013-01-15 20:36:11

标签: java selenium-webdriver testng

超级新手在这里。

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

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

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

但是,当显示no数据页时,我在OR语句的第一部分找不到元素。我认为'isDisplayed'的意思是检查元素是否存在。为什么我找不到元素错误?显然它不在那里,我想进入我的OR语句的第二部分。

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

2 个答案:

答案 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));