1

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

所以我需要点击右边的。我用 $([id="all"]) 找到了它,等到它显示出来后,使用 click() 方法并没有任何反应。我会感谢任何帮助

4

1 回答 1

1

在没有看到您正在使用的实际代码的情况下,我们能做的最好的事情就是假设您正在使用的选择器可能需要调整。例如,$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、类或其他属性的元素。

于 2021-10-23T10:48:43.900 回答