Использование лямбда для механизма, чтобы найти элемент в селене - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть снип-код с использованием лямбды, но получена ошибка

"целевой тип лямбда-преобразования должен быть интерфейсом".

Кто-нибудь может помочь?Мой код выглядит следующим образом:

private By optStarGrade = (strStar) -> { By.xpath("//input[@id='" + strStar + "'"); };

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Метод

Чтобы упростить то, что вы, вероятно, пробуете, и лучше сопоставить его, вы можете начать с вашего текущего кода, представленного как метод.Этот метод пытается найти optStarGrade типа By для данного strStar, который является частью вашего XPath, который будет выглядеть примерно так:

public static By optStarGradeFunction(String strStar) {
    return By.xpath("//input[@id='" + strStar + "'");
}

, а затем вы можетесоздать механизм By как:

By optStarGrade = findByXPath("XPath");

Анонимный класс

Аналогичное представление этого метода (или функции) будет:

Function<String, By> optStarGradeFunction = new Function<String, By>() {
    @Override
    public By apply(String strStar) {
        return By.xpath("//input[@id='" + strStar + "'");
    }
};

и затем доступен как

By optStarGrade = optStarGradeFunction.apply("XPath"); // calls the above 'apply' method

Лямбда

Но тогда Function можно представить с помощью лямбды так же просто, как:

Function<String, By> optStarGradeFunction = strStar -> By.xpath("//input[@id='" + strStar + "'");
0 голосов
/ 18 декабря 2018

By является классом, поэтому его нельзя использовать в качестве целевого типа для лямбда-выражения.

В качестве целевых типов для лямбда-выражений можно использовать только интерфейсы с SAM (Single Abstract Method).

Итак, если вы действительно хотите использовать лямбду, то используйте Consumer<String>:

private Consumer<String> optStarGrade = (strStar) -> {By.xpath("//input[@id='" + strStar + "'");};

, если вы не хотите игнорировать возвращаемое значение из By.xpath, тогда используйте Function<String, By>

private Function<String, By> optStarGrade = (strStar) -> By.xpath("//input[@id='" + strStar + "'");

См. Функция и Потребительские функциональные интерфейсы для получения дополнительной информации.

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