我正在尝试使用 WDIO 编写一些测试,但偶然发现了以下问题。我真的不明白如何点击()输入类型=收音机。这是它在 DOM 中的样子
所以我需要点击右边的。我用 $([id="all"]) 找到了它,等到它显示出来后,使用 click() 方法并没有任何反应。我会感谢任何帮助
在没有看到您正在使用的实际代码的情况下,我们能做的最好的事情就是假设您正在使用的选择器可能需要调整。例如,$
WebdriverIO 中的方法将选择器作为字符串,所以$('[id="all"]').click()
应该可以工作,因为选择器在单引号内,属性值在双引号中。
此外,简单地对 id 属性使用哈希符号可能更容易:
$('#all').click();
调试此类事情的一个好方法是使用 REPL。使用 REPL,您可以使用单选按钮手动浏览页面,然后从终端运行任意 WebdriverIO 命令以测试它们。假设它们有效,那么问题一定出在您的等待上。
另外,检查以确保 id="all" 的元素是唯一的。如果页面上有多个 id="all" 的元素,那么这将违反 HTML 规范,因为 id 属性值在单个页面上必须是唯一的。
要使用 REPL,请运行以下命令:
$ npx wdio repl chrome
这将打开一个浏览器,您可以手动控制它,也可以从终端运行 WebdriverIO 命令。
根据您在评论中提到的内容,您需要选择一个位于 ShadowDOM 中的元素。WebdriverIO 有一个 API,它看起来像这样:
$(selector).shadow$(selector);
第一个选择器将指向包含 shadowRoot 的元素,第二个选择器用于输入单选按钮元素。例如,假设这是您的 HTML:
<some-custom-element>
#shadow-root
<header>
<h1>
<input type="radio" id="all">
要访问并单击单选按钮,我们将使用以下 WebdriverIO 代码:
$('some-custom-element').shadow$('input#all');
你的 waitFors 也一样。如果我们正在等待 shadow DOM 中的某些内容出现,例如标题,我们会这样做:
$('some-custom-element').shadow$('header').waitForDisplayed();
尽管上面的示例使用了元素选择器,但我们也可以选择具有 id、类或其他属性的元素。