isElementPresent в селене 2.0 - PullRequest
12 голосов
/ 07 мая 2011

Привет всем Я использую webdriver, поэтому, если я хочу использовать селен, sc функция isElementPresent, я должен эмулировать селен 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();
  ...
  }

и я всегда получаю false в результате isElementPresent, и, конечно, элемент "текст" находится в сети (который использует GWT).

Ответы [ 5 ]

12 голосов
/ 13 июля 2011
7 голосов
/ 05 июля 2012

Вы можете реализовать это самостоятельно, используя чистый webdriver:

private boolean isElementPresent(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (NoSuchElementException e) {
        return false;
    }
}
3 голосов
/ 30 ноября 2012

Иногда элемент, который вы пытаетесь найти, загружается, s0 сгенерирует исключение, используя

 <code>findElement(By.xpath(xpathLocator))</code>  

Поэтому нам нужно сделать то, что рекомендовал Деян Ветерник, это поможет подождать, пока элемент не будет загруженна веб-странице я передаю Selenium и извлекаю веб-драйвер, это полезно, если вы используете WebDriverBackedSelenium, как и я ...

 private boolean isElementPresent(WebDriverBackedSelenium driver, String id) {
        try {
            driver.getWrappedDriver().findElement(By.id(id));
            return true;

        } catch (Exception e) {
            return false;
        }
    }

 
3 голосов
/ 09 мая 2011

Не является частью 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;
    }
3 голосов
/ 08 мая 2011

В мире Selenium 2, если вы хотите узнать, присутствует ли элемент, вы просто заключили бы вызов find в try catch, потому что если он не присутствует, он выдаст ошибку.

try{
  driver.findElement(By.xpath("//div"));
}catch(ElementNotFound e){
  //its not been found
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...