WebdriverIO browser.click 给出错误“其他元素会收到点击”。我该如何解决?

Posted

技术标签:

【中文标题】WebdriverIO browser.click 给出错误“其他元素会收到点击”。我该如何解决?【英文标题】:WebdriverIO browser.click gives error "Other element would receive the click". How do I fix? 【发布时间】:2018-05-02 06:49:54 【问题描述】:

当我尝试运行 webdriverIO selenium 代码时,我收到以下错误:

失败:未知错误:元素不是 在点 (389, 709) 处可点击。其他元素会收到点击: ...

【参考方案1】:

似乎问题在于您需要显式滚动到适当的元素才能单击按钮。不知道为什么它不是自动的,但使用browser.scroll(selector) (http://webdriver.io/api/utility/scroll.html) 很容易解决。

const checkboxSelector = 
    getAttributeSelector('data-test', 'manual-checkbox');
browser.scroll(checkboxSelector);
browser.click(checkboxSelector);

问题解决了

【讨论】:

这是一个技巧,而不是解决方案。我猜你是在非 Chrome 浏览器上运行测试(geckodriver 多次出现这个问题)。您可以使用您正在运行检查的package.json 依赖项和设置更新您的问题吗?例如,在chromedriver 上,.click() 命令会自动滚动到element,直到它在viewport 中可见。 感谢您的浏览。你是如何解决你在 geckodriver 上的问题的?不幸的是,即使您说 chromedriver 会自动滚动到元素,但在我的情况下它并没有这样做。我正在使用 chromedriver 进行测试。无法添加 package.json,因为有太多其他的东西,但我添加了一些相关的配置信息。【参考方案2】:

您的页面是否可能包含隐藏元素或您可能使用选择器定位的多个元素?当我看到这个错误时,通常我的单个选择器可能会在幕后定位另一个元素。消息“其他元素将收到点击”通常是表明它可能已拾取多个元素的关键,而您打算点击的元素不是脚本会点击的元素。

您可以通过在浏览器控制台中使用 CSS 选择器来测试这一点

$$('data-test')

如果您看到返回了多个元素,您可能需要更具体地使用您的选择器以更精确地缩小您打算采取行动的范围。

【讨论】:

这实际上是我的第一个想法@Denzik。但是当我查看页面时,它前面没有任何内容。但是,它超出了视口,阻止了点击。 @ThinkBonobo 你解决了吗?带有 webdriverIO 的 click() 应该正确找到元素然后单击而无需滚动到它。如果您最近没有更新,尤其是在较新版本的 ChromeDriver 和 WebdriverIO 中。 嘿denzik,我创建的数据测试标记属性对于页面上的单个元素是唯一的。我现在无法真正更新这些包,因为它们位于一个通用配置库中,其他用户可能正在使用它们。如果我升级 webdriver / chromedriver,我很可能在单击视口下方的按钮之前不需要 scroll() 命令,但现在我将它留在里面,因为它不会造成伤害。

以上是关于WebdriverIO browser.click 给出错误“其他元素会收到点击”。我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

XRAY 和 WebdriverIO 集成

Webdriverio 使用 async/await - 推荐啥? [关闭]

如何在独立模式下调试 webdriverio?

如何使用 WebdriverIO 上传文件

使用 CodeceptJS/WebdriverIO 并行执行浏览器

如何从 WebdriverIO 中的 WebElement 继承