如何在 webdriverIO 中点击 input type=radio

How to click input type=radio in webdriverIO

我正在尝试使用 WDIO 编写一些测试,但偶然发现了以下问题。我真的不明白如何点击()输入类型=收音机。这是 DOM

中的样子

所以我需要点击正确的那个。我用 $([id="all"]) 找到它,等到它显示后使用 click() 方法,但没有任何反应。我会感谢任何帮助

在看不到您正在使用的实际代码的情况下,我们最多只能假设 select 或者您正在使用的代码可能需要调整。例如,WebdriverIO 中的 $ 方法将 selector 作为字符串,因此 $('[id="all"]').click() 应该可以工作,因为 selector 在 single-quotes 内double-quotes.

中的属性值

此外,简单地使用 id 属性的哈希符号可能更容易:

$('#all').click();

调试此类内容的一个好方法是使用 REPL。使用 REPL,您可以使用单选按钮手动浏览到页面,然后从终端使用 运行 任意 WebdriverIO 命令以测试它们。假设它们有效,那么问题一定出在您的等待上。

另外,检查以确保 id="all" 的元素是唯一的。如果页面上有多个 id="all" 的元素,那么这将违反 HTML 规范,因为 id 属性值在单个页面上必须是唯一的。

要使用 REPL,运行 以下命令:

$ npx wdio repl chrome

这将打开一个浏览器,您可以手动控制该浏览器,也可以从终端通过 运行ning WebdriverIO 命令进行控制。

根据您在评论中提到的内容,您需要 select 一个位于 ShadowDOM 内的元素。 WebdriverIO 为此有一个 API,看起来像这样:

$(selector).shadow$(selector);

第一个 selector 将指向包含 shadowRoot 的元素,第二个 selector 指向输入单选按钮元素。例如,假设这是您的 HTML:

<some-custom-element>
  #shadow-root
    <header>
      <h1>
      <input type="radio" id="all">

要访问并单击单选按钮,我们将使用以下 WebdriverIO 代码:

$('some-custom-element').shadow$('input#all');

您的 waitFors 将同样工作。如果我们正在等待阴影 DOM 中的某些东西出现,例如 header,我们会这样做:

$('some-custom-element').shadow$('header').waitForDisplayed();

虽然上面的例子使用了元素selector,我们也可以select带有id的元素,类,或者其他属性。