【问题标题】:Trouble finding element node using TestCafe Selector or testcafe-react-selector for nested components使用 TestCafe Selector 或 testcafe-react-selector 为嵌套组件查找元素节点时遇到问题
【发布时间】:2019-03-06 16:55:12
【问题描述】:

我正在使用 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 树的 React 树:

<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');

总之,Selector 和 ReactSelector 都对我不起作用,因为当我尝试断言元素时出现此错误:

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

我知道我做错了什么,但无法弄清楚问题所在。有人可以告诉一个处理这些类型案件的好方法吗?

【问题讨论】:

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


    【解决方案1】:

    Selector('.header-count total &gt; div') 更改为Selector('div.header-count.total')。完整的断言看起来像:

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

    按照目前的编写方式,我相信您是在告诉 TestCafe 寻找 div,它是 total 元素的子元素,total 也是 .header-count 的后代。 TestCafe 认为它正在寻找这种结构:

    <div class="header-count">
       <total>
          <div>2 people</div>
       </total>
    </div>
    

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

    【讨论】:

    • 它有效。有没有办法可以使用 ReactSelector(.)..... ?我看到了 GitHub 项目 testcafe-react-selector 的详细信息,但我无法特别弄清楚这种嵌套场景。
    • @Prr 我对 React 不是很熟悉,但也许像 ReactSelector(Paper).findReact('div.header-count.total) 这样的东西可以用?
    • 啊,我刚刚注意到.findReact 只搜索子代而不是后代。您可以改为链接.find('div.header-count.total')
    • 好的。我认为可能有一种方法可以搜索后代,这就是我问的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2022-01-12
    相关资源
    最近更新 更多