Как проверить наличие или видимость элемента в селене 2 (Selenium WebDriver)

Любой может прислать мне пример кода, как проверить элемент

  1. присутствует
  2. виден
  3. активируется
  4. текстовое представление

в Selenium WebDrvier с использованием Java


person TEJAS TRIVEDI    schedule 04.01.2013    source источник
comment
Что вы пробовали? Вы читали какие-нибудь учебники? На каком языке? С#? Джава? PHP? Свинья на латыни?   -  person Arran    schedule 04.01.2013
comment
Я хочу попробовать это на языке java. Пожалуйста, пришлите мне учебники или справочный документ для веб-драйвера Selenium. Я буду вам благодарен. пожалуйста, помогите мне   -  person TEJAS TRIVEDI    schedule 04.01.2013


Ответы (6)


Я использовал операторы печати java для простоты понимания.

  1. Чтобы проверить наличие элемента:

    if(driver.findElements(By.xpath("value")).size() != 0){
    System.out.println("Element is Present");
    }else{
    System.out.println("Element is Absent");
    }
    

    Or

    if(driver.findElement(By.xpath("value"))!= null){
    System.out.println("Element is Present");
    }else{
    System.out.println("Element is Absent");
    }
    
  2. Чтобы проверить видимость:

    if( driver.findElement(By.cssSelector("a > font")).isDisplayed()){
    System.out.println("Element is Visible");
    }else{
    System.out.println("Element is InVisible");
    }
    
  3. Чтобы установить флажок Включить:

    if( driver.findElement(By.cssSelector("a > font")).isEnabled()){
    System.out.println("Element is Enable");
    }else{
    System.out.println("Element is Disabled");
    }
    
  4. Проверка наличия текста

    if(driver.getPageSource().contains("Text to check")){
    System.out.println("Text is present");
    }else{
    System.out.println("Text is absent");
    }
    
person Manigandan    schedule 18.01.2013
comment
В этих примерах лучше использовать класс ExpectedConditions. - person djangofan; 31.12.2013
comment
if( driver.findElement(By.cssSelector(a › font)).isDisplayed()){ не будет работать, так как isdisplayed не возвращает false. возвращает true, только если отображается, в противном случае выдает исключение элемент не найден... - person Manglesh; 19.01.2018

Вы можете попробовать что-то вроде:

    WebElement rxBtn = driver.findElement(By.className("icon-rx"));
    WebElement otcBtn = driver.findElement(By.className("icon-otc"));
    WebElement herbBtn = driver.findElement(By.className("icon-herb"));

    Assert.assertEquals(true, rxBtn.isDisplayed());
    Assert.assertEquals(true, otcBtn.isDisplayed());
    Assert.assertEquals(true, herbBtn.isDisplayed());

Это всего лишь пример. По сути, вы объявляете и определяете переменные WebElement, которые хотите использовать, а затем Assert независимо от того, отображаются они или нет. Это использует утверждения TestNG.

person DarthOpto    schedule 04.01.2013
comment
я пробую приведенный выше пример, но это не выполнение следующих шагов, если предыдущее утверждение не выполнено. Я хочу использовать проверку вместо утверждения, чтобы он мог выполнять следующие шаги теста. И я также заставляю провалить весь тестовый пример, если какое-либо утверждение и проверка не пройдены. - person TEJAS TRIVEDI; 07.01.2013
comment
Итак, из вашего ответа я понял, что вы хотели бы, чтобы тест продолжался, даже если утверждение не выполняется. Это правильно? - person DarthOpto; 08.01.2013
comment
Да, я хочу именно то, что ты написал. я хочу, чтобы тест продолжался, даже если утверждение теста не выполнено, и в последнем после выполнения всех шагов теста результат теста помечается как результат сбоя в отчете. Но он должен завершить выполнение всего шага. - person TEJAS TRIVEDI; 08.01.2013
comment
Какой язык вы используете? Если вы используете Java, TestNG или JUnit? - person DarthOpto; 08.01.2013
comment
В зависимости от того, как вы запускаете свои тесты, единственный вариант, который я мог найти в документации TestNG, — это -configurefailpolicy для параметров командной строки. testng.org/doc/documentation-main.html - person DarthOpto; 09.01.2013
comment
WebElement rxBtn = driver.findElement (By.className (icon-rx)); Assert.assertEquals(true, rxBtn.isDisplayed()); Я думаю, что нет смысла писать вторую строку после первой строки, поскольку, если элемента там нет, findElement выдаст исключение NoSuchElementException, тем самым завершив выполнение программы в этой строке. assertEquals() не будет запущен. - person learningQA; 17.11.2018

Вот мой код Java для Selenium WebDriver. Напишите следующий метод и вызовите его во время утверждения:

protected boolean isElementPresent(By by){
        try{
            driver.findElement(by);
            return true;
        }
        catch(NoSuchElementException e){
            return false;
        }
    }
person Ripon Al Wasim    schedule 16.03.2015

Попробуйте использовать код ниже:

private enum ElementStatus{
        VISIBLE,
        NOTVISIBLE,
        ENABLED,
        NOTENABLED,
        PRESENT,
        NOTPRESENT
    }
    private ElementStatus isElementVisible(WebDriver driver, By by,ElementStatus getStatus){
        try{
            if(getStatus.equals(ElementStatus.ENABLED)){
                if(driver.findElement(by).isEnabled())
                    return ElementStatus.ENABLED;
                return ElementStatus.NOTENABLED; 
            }
            if(getStatus.equals(ElementStatus.VISIBLE)){
                if(driver.findElement(by).isDisplayed())
                    return ElementStatus.VISIBLE;
                return ElementStatus.NOTVISIBLE;
            }
            return ElementStatus.PRESENT;
        }catch(org.openqa.selenium.NoSuchElementException nse){
            return ElementStatus.NOTPRESENT;
        }
    }
person Mayur Shah    schedule 16.03.2015

Чтобы убедиться, что элемент присутствует, вы можете сделать следующее:

driver.findElements(By.id("id"));

Это вернет массив, если размер этого массива > 0, то элемент/ы присутствуют.

Кроме того, вам необходимо предоставить дополнительную информацию, такую ​​как язык и что вы пробовали, прежде чем спрашивать,

Удачи

person Santiago Hernandez    schedule 07.01.2013
comment
driver.findelement(By.id(id1)).isDisplayed()' driver.findelement(By.id(id2)).sendkey(test); Здесь, если элемент не отображается, он не проходит тестовый пример и не переходит к следующему шагу для выполнения. Поэтому, пожалуйста, помогите мне, как обрабатывать утверждение и выполнение теста xcontinue для следующих шагов в selenium webdrier и testng. Даже я также хочу пометить тестовый пример как неудачный, если какое-либо утверждение не удалось. - person TEJAS TRIVEDI; 07.01.2013
comment
id уникален, вы должны использовать для него .findElement(). .findElements(), например. By.ИмяКласса() - person Brunis; 17.03.2015

Чтобы проверить, является ли элемент видимым, нам нужно использовать element.isDisplayed(); Но если нам нужно проверить присутствие элемента в любом месте Dom, мы можем использовать следующий метод

public boolean isElementPresentCheckUsingJavaScriptExecutor(WebElement element) {
        JavascriptExecutor jse=(JavascriptExecutor) driver;
        try {
            Object obj = jse.execute("return typeof(arguments[0]) != 'undefined' && arguments[0] != null;",
                    element);
            if (obj.toString().contains("true")) {
                System.out.println("isElementPresentCheckUsingJavaScriptExecutor: SUCCESS");
                return true;
            } else {
                System.out.println("isElementPresentCheckUsingJavaScriptExecutor: FAIL");
            }

        } catch (NoSuchElementException e) {
            System.out.println("isElementPresentCheckUsingJavaScriptExecutor: FAIL");
        }
        return false;
    }
person Jlearner    schedule 13.10.2017
comment
Метод execute(String, WebElement) не определен для типа JavascriptExecutor. - person Steve Staple; 06.03.2018