使用 nightwatch.js 手动覆盖 child

Manually override the child using nightwatch.js

我目前正在为 select 列表中的新文档编写 Nightwatch 测试。我需要能够 select 列表中的下一个。有没有办法手动覆盖需要 selecting 的 child 号码?

例如当前select或正在使用的是:

<ul class="dv-packdocs">
 <li class="dv-packdoc"<div class="icon-todo"></li>
 <li class="dv-packdoc"<div class="icon-todo"></li>
 <li class="dv-packdoc"<div class="icon-todo"></li>
 <li class="dv-packdoc"<div class="icon-todo"></li>
</ul>

测试会是这样的:

viewer.selectNewDocument([2])

这个select会不会是ul下的第二个child?

或者我是否必须指定每个 child 元素?

如果我理解正确,您正试图从动态长度列表 (ul 中动态查找适当的子元素 (li),其中该列表是基于根据用户输入或其他站点操作)。正确吗?

我看到两种不同方法的两种情况:

1. 你有一个set/fixed条件识别目标元素的方式):例如,在您的列表中,第二个 li 将成为以下命令的目标。

viewer.selectNewDocument('ul.dv-packdocs li:nth-child(2)')考虑到您要将完整的选择器传递给 selectNewDocument 函数

,或

viewer.selectNewDocument(2),在命令中传递一个 number & 形成选择器(如果你关心美学):

selectNewDocument: function(index) {
  this.api.perform((done) => {
    // Click the second document in the list:
    let selector = `ul.dv-packdocs li:nth-child(${index})`;
    this.api.click(selector);
    done();
  });
  return this;  
},

或者,如果您想要添加最后一个文档,则必须对 ul 发出 elements 调用以检索列表的长度,然后在相同的位置使用它确定您必须单击哪个 li 的方法:viewer.selectNewDocument('ul.dv-packdocs li:nth-child('+length+')') 其中 length 是您 elements 调用 的结果)。


2. 你没有固定条件如果第一个我就补上部分没有涵盖,或者今天晚些时候,假期过后有点猛烈抨击)

希望这就是您要找的!干杯!