使用TestCafe Selector或testcafe-react-selector对嵌套组件进行故障查找元素节点

时间:2019-03-06 16:55:12

标签: javascript reactjs automated-tests e2e-testing testcafe

我正在使用TestCafe 1.1.0版和Testcafe-react-selector 3.1.0版。我的目标是从节点返回文本。 HTML树如下所示:

<div class="header">
     <div class="title">board</div>
     <div class="secondary-title">Wednesday Mar 06, 2019</div>
</div>
<div class="MuiPaper-root-9 MuiPaper-elevation2-02 MuiPaper-rounded-9 board-title-break">
    <div class="board-header">
         <div class="title">Text Title</div>
         <div class="details">
           <div>
               <div>Total</div>
               <div class="header-count total">2 people</div>
           </div>
           <div> ... </div>
           <div> ... </div>
           <div> ... </div>
           ....
           </div>

在这里,我想获取“ 2人”文本,并验证“ 2人”是否可见。

我尝试使用Selector进行以下操作:

Selector('.header-count total > div')

但这没有解决。

这是从REACT chrome扩展名获得的同一HTML树的反应树:

<TitleBreakdown loading={false} accountId={323}> ==$r
     WithStyles(Paper) className="title-breakdown">
          <Paper className="title-breakdown" component="div" elevation={2} square={false}>
              <div className="MuiPaper-root-9 MuiPaper-elevation2-02 MuiPaper-rounded-9"
                  <div className="board-header">
                      <div class="title">Text Title</div>
                      <div class="details">
                          <div>
                              <div>Total</div>
                              <div class="header-count total">2 people</div>
                          </div>
                          <div> ... </div>
                          <div> ... </div>
                          <div> ... </div>
                           ....
                          </div>

对于上面的React组件,我尝试使用它:

ReactSelector('TitleBreakdown').findReact('div').findReact('div').nth(1).findReact('div').nth(1).withKey('header-count total');

总之,选择器和ReactSelector都对我不起作用,因为在尝试声明该元素时遇到此错误:

Cannot obtain information about the node because the specified selector does not match any node in the DOM
  tree.

我知道我做错了事,但无法找出问题所在。有人可以说出一种处理此类案件的好方法吗?

1 个答案:

答案 0 :(得分:7)

Selector('.header-count total > div')更改为Selector('div.header-count.total')。完整的断言如下所示:

await t
   .expect(Selector('div.header-count.total').innerText).eql('2 people');

目前的编写方式,我相信您是在告诉TestCafe寻找div元素的子元素totaltotal也是{{ 1}}。 TestCafe认为它正在寻找这种结构:

.header-count

查看W3 Schools Selector Reference,以了解每种模式选择的内容。