当前位置: 首页 > 面试题库 >

过滤ElementsCollection

竺国兴
2023-03-14
问题内容

我正在尝试创建一个函数ElementsCollection,以对每个元素的子项而不是元素本身的条件进行过滤。

这是我想出的:

 public static ElementsCollection filterByChild(ElementsCollection elementsCollection, String childCssSelector,
        Condition condition) {

        Predicate<SelenideElement> childHasConditionPredicate = element -> element.$(childCssSelector).has(condition);
        elementsCollection.removeIf(childHasConditionPredicate);
        return elementsCollection;
    }

当像这样调用此函数时:

myCollection = SelenideHelpers.filterByChild(myCollection, "a", Condition.text("http://www.link.com");

我收到以下错误消息:

java.lang.UnsupportedOperationException: Cannot remove elements from web page

我没有发现有关此错误消息的任何相关信息,这些信息可以应用于我的代码。我想知道为什么会出现此消息。


问题答案:

检查SelenideElementIterator的设计方式:

@Override
public void remove() {
  throw new UnsupportedOperationException("Cannot remove elements from web page");
}

要使其正常工作,您需要创建自定义条件,例如:

import com.codeborne.selenide.Condition;
import com.codeborne.selenide.ElementsCollection;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import static com.codeborne.selenide.Selenide.$$;


public static Condition hasChildWithCondition(final By locator, final Condition condition) {
    return new Condition("hasChildWithCondition") {
        public boolean apply(WebElement element) {
            return element.findElements(locator).stream().
                    filter(child -> condition.apply(child)).count() > 0;
        }

        public String toString() {
            return this.name
        }
    };
}

然后使用它进行过滤:

ElementsCollection collection = $$(".parent");
Condition hasChild = hasChildWithCondition(By.cssSelector("a"), Condition.text("http://www.link.com"));
collection.filterBy(hasChild);


 类似资料:
  • Filter(过滤器)是 Java 组件,允许运行过程中改变进入资源的请求和资源返回的响应中的有效负载和头信息。 Java Servlet API 类和方法提供了一种轻量级的框架用于过滤动态和静态内容。还描述了如何在 Web 应用配置 filter,以及它们实现的约定和语义。 网上提供了 servlet 过滤器的 API 文档。过滤器的配置语法在第14章的“部署描述符”中的部署描述符模式部分给出。

  • 过滤掉不在范围内的数值。 用法 Your browser does not support the video tag. 案例:小台灯 功能:15:00:00时灯自动亮起,15:30:00时自动熄灭 工作原理 在配置项中设定一组范围。如果输入落在范围内,则输出输入本身;否则,输出no。

  • 过滤操作符 在基于推送的方式下,选择接受项的方式和时间很重要。这些操作符提供了从 observable 源中接受值和处理backpressure (背压)的技术。 内容 audit auditTime debounce debounceTime :star: distinctUntilChanged :star: filter :star: first ignoreElements last sa

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 主要内容:缩小搜索元素的范围,jQuery first() 方法,实例,jQuery last() 方法,实例,jQuery eq() 方法,实例,jQuery filter() 方法,实例,jQuery not() 方法,实例缩小搜索元素的范围 三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素。 其他过滤方法,比如 filter() 和 not() 允许您选取匹配或不匹配某项指定标准的元素。 jQuery first(

  • 过滤器是 控制器动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。 过滤器可包含预过滤(过滤逻辑在动作之前)或后过滤(过滤逻辑在动作之后), 也可同时包含两者。 使用过滤器 过滤器本质上是一类特殊的 行为, 所以使用过滤器和 使用行为一样。 可以在控制器类中覆盖它的 behavio