使用lambda表达式在selenium中查找元素的机制

3

我有一段使用lambda的代码,但是出现了错误:

"lambda转换的目标类型必须是一个接口"

有人能帮忙吗?我的代码如下:

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

2

By是一个类,不能用作lambda表达式的目标类型。

只有具有SAM(Single Abstract Method)的接口可以用作lambda表达式的目标类型。

如果您真的想使用lambda,则使用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 + "'");

查看FunctionConsumer函数接口以获取更多信息。


1

方法

为了简化您可能正在尝试的内容并更好地关联它,您可以将当前代码表示为一个方法。该方法试图查找类型为 By optStarGrade ,以获取给定的 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

Lambda

然后,Function 可以使用 lambda 表示为:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接