Подтвердить что ты не робот

IsElementPresent в селене 2.0

Привет всем Я использую webdriver, поэтому, если я хочу использовать selenium, функция s rc 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).

4b9b3361

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Не являясь частью 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;
    }

Ответ 5

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

  findElement(By.xpath(xpathLocator))  

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

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

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

 

Ответ 6

Я использую библиотеку Node selenium-webdriver 3.6.0.

Он имеет driver.findElements (возвращает ноль или более элементов) и driver.findElement (возвращает первый найденный элемент или выбрасывает NoSuchElementError).

Поэтому я хотел бы рекомендовать это в качестве проверки на наличие хотя бы одного элемента. Возможно, полезно в Java.

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