1

我正在尝试使用 selenium web-driver 2 工具进行测试。

应用程序有元素,其存在是不可预测的。好的。在大多数情况下,它们出现在页面上。但在某些情况下,它们不是。下面的方法点击不可预知的元素

public void clickTypeAheadDropdown(String typeAheadItem) {
    String xPathItemSelector = "//div[@class='gwt-SuggestBoxPopup']//td[text()='" + typeAheadItem + "']";
    WebElement dropDownItem = driver.findElement(By.xpath(xPathItemSelector));
    if (dropDownItem.isDisplayed() ) {
        dropDownItem.click();
    };

}

但是当元素不存在时它会失败。异常是由方法driver.findElement(By.xpath(xPathItemSelector)

你知道,我如何测试页面上是否存在元素?

PS我认为,捕捉“未找到元素”异常不是一个好主意,因为它是在测试超时时引发的

4

3 回答 3

4

我通常使用下面的方法来测试一个元素是否存在。

public boolean isElementPresent(By element) {
   try {
       driver.findElement(element);
       return true;
   } catch (NoSuchElementException e) {
       return false;
   }
}

等待时间也可以配置在WebDriver

webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

我不知道有其他方法可以做到这一点。由于您的页面可能会以不可预知的时间加载,因此您必须等待并使用超时。

于 2013-07-04T12:25:16.837 回答
0

你也可以使用 FindElements 来做到这一点:

    /// <summary>
    /// Checks if the specified element is on the page.
    /// </summary>
    public static bool IsElementPresent(this IWebDriver driver, By element)
    {
        if (driver.FindElements(element).Count > 0)
            return true;
        else
            return false;
    }

    /// <summary>
    /// Checks if the specified element is on the page and is displayed.
    /// </summary>
    public static bool IsElementDisplayed(this IWebDriver driver, By element)
    {
        if (driver.FindElements(element).Count > 0)
        {
            if (driver.FindElement(element).Displayed)
                return true;
            else
                return false;
        }
        else
        {
            return false;
        }
    }

    /// <summary>
    /// Checks if the specified element is on the page and is enabled.
    /// </summary>
    public static bool IsElementEnabled(this IWebDriver driver, By element)
    {
        if (driver.FindElements(element).Count > 0)
        {
            if (driver.FindElement(element).Enabled)
                return true;
            else
                return false;
        }
        else
        {
            return false;
        }
    }

希望能帮助到你。

于 2013-07-04T14:09:53.060 回答
0

要检查元素是否存在,您可以使用以下代码:

if(driver.findElements(By.xpath("value")).size() != 0){
System.out.println("Element is Present");
}else{
System.out.println("Element is Absent");
}
于 2015-07-08T09:34:05.353 回答