【问题标题】:Unable to click on filtered element using javascript无法使用 javascript 单击过滤后的元素
【发布时间】:2020-04-26 02:12:39
【问题描述】:

无法点击过滤的元素。

$$("app-filters-manager app-salesflow-panel mat-expansion-panel").filter(element => {
        return element.getText() === "face";
}).click();

我收到以下错误

$$(...).filter(...).click is not a function

【问题讨论】:

    标签: javascript jquery automation webdriver-io


    【解决方案1】:

    .filter 返回一个元素数组,而不是一个元素。

    您需要在调用.click之前从列表中选择一个元素:

    .filter(...)[0].click();
    

    【讨论】:

    • ChanChow,你应该将此标记为正确答案。
    • @Joundill 我很欣赏这个姿态,但我认为这只会影响我,而不是 ChanChow(因为评论是针对我的回答,而不是针对他们的问题)。这也不是真的必要,ChanChow 不是新用户,之前已经接受过答案。他们可能很忙,或者可能正在等待是否有更完整的答案出现,没有理由要求接受,OP 可以在自己的时间接受他们选择的任何答案,或者根本不接受。
    【解决方案2】:

    除了@nick 解释的内容外,您还可以使用find,这将是一种更有效的方法来实现您的目标。

    $$("app-filters-manager app-salesflow-panel mat-expansion-panel").find(element => {
            return element.getText() === "face";
    }).click();
    

    filter 方法将遍历所有元素,即使在找到一个满足条件的元素之后也是如此,不像 find 会在第一次出现时停止。

    如果没有元素满足条件,这两个都将返回 undefined,当你尝试执行 click on undefined 时会抛出错误。

    【讨论】:

    • 正如你提到的迭代器在第二个元素上抛出未定义的错误。为什么会这样。过滤器或查找的主要目标是找到元素并执行一些操作
    • 您是否有多个元素与您的选择器匹配?这些是您在选择器中使用的类吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多