selenium 2.0中的isElementPresent

时间:2011-05-07 17:50:52

标签: java selenium webdriver selenium-webdriver

大家好 我正在使用webdriver,所以如果我想使用selenium; s rc函数isElementPresent我必须模仿selenium rc所以我做这样的事情:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverBackedSelenium;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class new {
 private static void one_sec() {
  Thread.sleep(4000);
 }
 public static void main(String[] args) {    
  WebDriver driver = new FirefoxDriver();
  driver.get(something1);
  Selenium selenium = new WebDriverBackedSelenium(driver, something1); 
  selenium.click("//html...");
  one_sec();
  System.out.println(selenium.isElementPresent("text"));
  WebDriver driverInstance = ((WebDriverBackedSelenium) selenium).getWrappedDriver();
  ...
  }

我总是因为isElementPresent而得到错误,当然元素“text”在网上(使用GWT)。

6 个答案:

答案 0 :(得分:12)

我非常喜欢Rostislav Matl's替代Moving to Selenium 2 on WebDriver, Part No.1

driver.findElements(By.className("someclass")).size() > 0;

Javadoc:org.openqa.selenium.WebDriver.findElements(org.openqa.selenium.By by)

答案 1 :(得分:7)

您可以使用纯webdriver自己实现它:

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

答案 2 :(得分:3)

在Selenium 2世界中,如果你想找到一个元素是否存在,你只需将find调用包装在try catch中,因为如果它不存在则会抛出错误。

try{
  driver.findElement(By.xpath("//div"));
}catch(ElementNotFound e){
  //its not been found
}

答案 3 :(得分:3)

不是Selenium 2的一部分,您可以执行以下操作:

// Use Selenium implementation or webdriver implementation 
Boolean useSel = false;

/**
     * Function to enable us to find out if an element exists or not.
     *
     * @param String An xpath locator
     * @return boolean True if element is found, otherwise false.
     * @throws Exception
     */
    public boolean isElementPresent(String xpathLocator) {
        return isElementPresent(xpathLocator, false, "");
    }

/**
     * Function to enable us to find out if an element exists or not and display a custom message if not found.
     *
     * @param String An xpath locator
     * @param Boolean Display a custom message
     * @param String The custom message you want to display if the locator is not found
     * @return boolean True if element is found, otherwise false.
     * @throws Exception
     */
    public boolean isElementPresent(String xpathLocator, Boolean displayCustomMessage, String customMessage) {
        try {
            if (useSel) {
                return sel.isElementPresent(xpathLocator);
            } else {
                driver.findElement(By.xpath(xpathLocator));
            }
        } catch (org.openqa.selenium.NoSuchElementException Ex) {
            if (displayCustomMessage) {
                if (!customMessage.equals("")) {
                    System.out.print(customMessage);
                }
            } else {
                System.out.println("Unable to locate Element: " + xpathLocator);
            }
            return false;
        }
        return true;
    }

答案 4 :(得分:3)

有时您尝试查找的元素正在加载,s0将使用

  findElement(By.xpath(xpathLocator))  

引发异常

因此我们需要做Dejan Veternik所推荐的事情,它将有助于等待ELEMENT加载到网页中,我通过Selenium并提取webdriver,这有助于你像我一样使用WebDriverBackedSelenium ...

findElement(By.xpath(xpathLocator)) 

答案 5 :(得分:0)

我正在使用节点库 selenium-webdriver 3.6.0

它具有 driver.findElements (返回零个或多个项目)和 driver.findElement (返回找到的第一个项目或抛出NoSuchElementError)。

因此,我建议将此作为检查是否可以找到至少一个元素的检查。在Java中可能有用。

driver.findElement(By.className("someclass"));