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

Как проверить, является ли элемент видимым с помощью WebDriver

С WebDriver от Selenium 2.0a2 у меня возникает проблема с проверкой того, является ли элемент видимым.

WebDriver.findElement возвращает a WebElement, который, к сожалению, не предлагает метод isVisible. Я могу обойти это, используя WebElement.clear или WebElement.click, оба из которых генерируют ElementNotVisibleException, но это очень грязно.

Любые лучшие идеи?

4b9b3361

Ответ 1

element instanceof RenderedWebElement должен работать.

Ответ 2

Хотя я немного опоздал, отвечая на вопрос:

Теперь вы можете использовать WebElement.isDisplayed(), чтобы проверить, является ли элемент видимым.

Ответ 3

У меня есть следующие два предложенных способа:

  • Вы можете использовать isDisplayed(), как показано ниже:

    driver.findElement(By.id("idOfElement")).isDisplayed();
    
  • Вы можете определить метод, как показано ниже, и называть его:

    public boolean isElementPresent(By by) {
      try {
        driver.findElement(by);
        return true;
      }
    catch (org.openqa.selenium.NoSuchElementException e) {
        return false;
      }
    }
    

Теперь вы можете сделать утверждение, как показано ниже, чтобы проверить, присутствует ли этот элемент или нет:

assertTrue(isElementPresent(By.id("idOfElement")));

Ответ 4

Если вы используете С#, это будет driver.Displayed. Вот пример из моего собственного проекта:

if (!driver.FindElement(By.Name("newtagfield")).Displayed)      //if the tag options is not displayed
    driver.FindElement(By.Id("expand-folder-tags")).Click();    //make sure the folder and tags options are visible

Ответ 5

Подтверждающий элемент виден.

public static boolean isElementVisible(final By by)
    throws InterruptedException {
        boolean value = false;

        if (driver.findElements(by).size() > 0) {
            value = true;
        }
        return value;
    }

Ответ 6

Вот как я это сделаю (пожалуйста, игнорируйте вызовы класса Logger):

public boolean isElementExist(By by) {
    int count = driver.findElements(by).size();
    if (count>=1) {
        Logger.LogMessage("isElementExist: " + by + " | Count: " + count, Priority.Medium);
        return true;
    }
    else {
        Logger.LogMessage("isElementExist: " + by + " | Could not find element", Priority.High);
        return false;
    }   
}

public boolean isElementNotExist(By by) {
    int count = driver.findElements(by).size();
    if (count==0) {
        Logger.LogMessage("ElementDoesNotExist: " + by, Priority.Medium);
        return true;
    }
    else {
        Logger.LogMessage("ElementDoesExist: " + by, Priority.High);
        return false;
    }   
}

public boolean isElementVisible(By by) {
    try {
        if (driver.findElement(by).isDisplayed()) {
            Logger.LogMessage("Element is Displayed: " + by, Priority.Medium);
            return true;
        }
    }
    catch(Exception e) {       
        Logger.LogMessage("Element is Not Displayed: " + by, Priority.High);
        return false;
    }       

    return false;
}

Ответ 7

Важно видеть, является ли элемент видимым или нет, поскольку Driver.FindElement будет проверять только источник HTML. Но всплывающий код может быть на странице html и не быть видимым. Поэтому функция Driver.FindElement возвращает ложный положительный результат (и ваш тест не будет выполнен)

Ответ 8

public boolean isElementFound( String text) {
        try{
            WebElement webElement = appiumDriver.findElement(By.xpath(text));
            System.out.println("isElementFound : true :"+text + "true");
        }catch(NoSuchElementException e){
            System.out.println("isElementFound : false :"+text);
            return false;
        }
        return true;
    }

    text is the xpath which you would be passing when calling the function.
the return value will be true if the element is present else false if element is not pressent

Ответ 9

element instanceof RenderedWebElement должен работать.//Но это для более старой версии selenium rc.

Обратите внимание:

RenderedWebElement был устарел четыре года назад (в 2013 году). Он был поддержан до selenium-2.0-rc-2 и удаляется из селена-2.0-rc-3 вперед

Таким образом, в последней версии нет такого класса RenderedWebElement. Текущая версия - 2.46.0. Попробуйте использовать последнюю версию

Пожалуйста, используйте WebElement Вместо этого не нужно бросать и все с isDisplayed() isEnabled() and driver.findElements(By.xpath(accessor)).size() > 0

Что-то вроде этого:

public static boolean isElementFoundDisplayedEnabled(WebDriver driver, String accessor){

        return driver.findElements(By.xpath(accessor)).size() > 0 && driver.findElement(By.xpath(accessor)).isDisplayed() && driver.findElement(By.xpath(accessor)).isEnabled();
        //isDisplayed(): method avoids the problem of having to parse an element "style" attribute to check hidden/visible. False when element is not present
        //isEnabled(): generally return true for everything but disabled input elements.
}

Ответ 10

попробуйте это

public boolean isPrebuiltTestButtonVisible() {
    try {

        if (preBuiltTestButton.isEnabled()) {

            return true;

        } else {

            return false;
        }

    } catch (Exception e) {

        e.printStackTrace();
        return false;
    }
}