Можем ли мы написать универсальный метод, который принимает элемент в качестве параметра и возвращает результат. (например, метод, возвращающий результат функции isDisplayed ())? - PullRequest
0 голосов
/ 08 января 2019

Я пишу код селена (Java) для страницы формы, которая состоит из 5 различных элементов (текстовое поле, радио, флажок, список, выпадающий список). Я должен проверить видимость каждого элемента (например, txtfield.isDisplayed ()).

Я слежу за объектной моделью страницы, и у меня есть класс страницы, который определяет все элементы и методы для работы с элементами. В настоящее время я написал 5 разных методов для каждого элемента, чтобы вернуть статус видимости. Это отлично работает.

Однако я хочу понять, возможно ли иметь один метод, который может принимать элемент в качестве параметра и возвращать результат.

Например:

String idForTextField = "id-text-field"


public boolean isElementVisible(String input){
        return input.isDisplayed()
}

Проблема, с которой я сталкиваюсь, заключается в том, что для вызова функции isDisplayed () нам нужно фактическое имя элемента ("idForTextField"); Имя параметра («input») не будет работать, даже если в качестве параметра было передано «idForTextField».

Есть ли реализация, которая поможет достичь этого?

Обратите внимание, что элементы формы идентифицируются по-разному. Двое из них по id и трое из них xpath.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Я думаю, что вы можете передать WebElement непосредственно в аргументе метода, так что isDisplayed () будет применим ко всем элементам, независимо от того, найден ли он по id или xpath.

Фрагменты кода для создания метода, позволяющего проверить, отображается ли элемент или нет. Предположим, что следующая кнопка отправки является вашим веб-элементом

WebElement submitButton=driver.findElementBy.xpath("your xpath or use by.id");


    //method to check visibility of web element
     public boolean isElementVisible(Webelement element)
    { return element.isDisplayed();
     }
0 голосов
/ 08 января 2019

Вы можете передать xPath для своих элементов в общий метод.

public static boolean isDisplayed(String){
    return driver.findElement(By.xpath('YOUR XPATH HERE')).isDisplayed();
}

Чтобы помочь вам с xPath, вы можете получить его путем проверки элемента в Google Chrome.

Примечание. Кроме того, этот метод создает исключение, если элемент не найден. Обрабатывать это соответственно, а также в соответствии с вашими требованиями. Удачи!

Редактировать 1: Вы также можете сделать это,

enum FindBy{
   ID,XPATH
}

public static void isVisible(String,FindBy findBy){
    Webelement element = null;
    switch(findBy){
         case XPATH:
         element = driver.findElement(By.xpath('YOUR XPATH HERE'));
         break;
         case ID:
         element= driver.findElement(By.id('YOUR ID HERE'));
         break;
    }
    return element!=null && element.isVisible();
}

Также еще один способ - определить перечисление с помощью методов

enum FindBy {
       ID
       @Override
       public WebElement getElement(String){
          return driver.findElement(By.id('String'));
        },
       XPATH
     @Override
       public WebElement getElement(String){
          return driver.findElement(By.xpath('String'));
        },   
public abstract WebElement getElement(String);

public boolean isVisible(String) {
    return getElement(String).isVisible();
 }
}

Вы можете назвать это как FindBy.ID.isVisible(String);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...