小编Els*_*rit的帖子

如何使用 Jest/Puppeteer 等待元素从 DOM 中移除

问题总结:我正在编写几个测试套件(使用 Jest 和 Puppeteer)来自动化我的 AngularJS 应用程序主页的测试。我想要自动化的测试之一是用户按下页面上的按钮删除 DOM 中的元素。不幸的是,这个元素是用来显示大量数据的,所以为了删除元素,客户端首先需要向我的服务器发出POST请求从db中删除数据,然后才能删除元素从 DOM 中删除。总而言之,整个过程大约需要一两秒钟。更重要的是,我尝试删除的这个元素是动态添加到 DOM 中的,所以我能够访问该元素的唯一方法是使用 XPath,它通过它包含的文本来标识元素,而不是传统的 CSS 选择器. 现在这是我的问题:

这是我的 HTML 外观的概述,以便您了解我正在使用的内容:

<html>
  <body ng-app="myApp" ng-controller="myCtrl">
    <!-- Dynamically added div -->
    <div>My Data
      <table><!-- Displays tons of data --></table>
    </div>
    <form>
      <button type="submit">Delete</button>
    </form>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

背景:我使用 Jest (v24.8.0) 作为我的测试框架。我正在使用 Puppeteer (v1.19.0) 来启动和控制无头 Chromium 浏览器。

到目前为止我尝试过的:

目前,我有这个代码

  test('deleted elem no longer exists', async() => {
    elemXPath = '//div[contains(text(), "My Data")]';

    // this is a function to pause the 
    // execution of …
Run Code Online (Sandbox Code Playgroud)

javascript jestjs puppeteer

6
推荐指数
1
解决办法
4162
查看次数

用于输入的 Puppeteer 方法永远不会完成输入传递给它们的完整字符串

问题

问题摘要:我正在编写几个测试套件(使用 Jest 和 Puppeteer)来自动化我的 AngularJS 应用程序主页的测试。我想自动化的许多测试涉及用<textareas>'s填写表单,其中需要输入字符串(不同长度)。但问题是每个 Puppeteer 可用于打字的方法都极其不一致,因为并非所有传递给这些方法的字符串中的字符都最终被打字,有时这些方法甚至会破坏后续方法做不相关的事情。

测试环境概览

  • 傀儡师版本:1.19.0
  • 玩笑版本:24.8.0

我努力做到的

研究:我在 Puppteeer 的 Github 问题页面上广泛搜索了解决方案,因为这个问题似乎非常普遍。到目前为止,我已经尝试了#1648#2784#1958#1223 中提供的解决方案。以下是我尝试过的代码片段,摘自这些不同的答案。到目前为止,他们都没有工作。

<!-- index.html -->
<html>
  <body ng-app="myApp" ng-controller="myCtrl">
    <div>
      <md-content>
        <form test-id="myForm">
          <md-input-container>
            <div>
              <textarea ng-model="myCtrl.user.name" test-id="userName"></textarea>
            </div>
          </md-input-container>
          <md-input-container>
            <input type="file" ng-model="myCtrl.user.photo" test-id="uploadPhoto">
          </md-input-container>
          <md-dialog-actions>
            <button type="submit" test-id="submitForm">Submit</button>
          </md-dialog-actions>
        </form>
      </md-content>
    </div>
    <!-- These divs appear after the form has been submitted -->
    <div>
      <p><!-- username goes here --></p> …
Run Code Online (Sandbox Code Playgroud)

javascript jestjs puppeteer jest-puppeteer

5
推荐指数
1
解决办法
1625
查看次数

如何强制 Puppeteer 等待非常大的 HTML 表中的所有行完全加载并显示在 DOM 中

问题

问题摘要:我正在编写几个测试套件(使用 Jest 和 Puppeteer)来自动测试 AngularJS 应用程序的主页。注意:我的一些 ui 组件由名为 AngularJS Material 的框架提供支持。我想要自动化的测试之一是用户按下页面上的按钮来重新加载表格。不幸的是,这个表用于显示大量数据,因此为了重新加载该表,客户端首先需要向我的服务器发出 GET 请求,以从 db 中提取该表数据,然后该表才能重新加载显示在 DOM 中。总而言之,整个过程大约需要一两秒钟。所以这是我的问题:如何编写一些 Jest/Puppeteer 测试代码来等待表在 DOM 中完全加载/显示(即显示所有表行数据)。

编辑以澄清:

无法预先确定表中有多少行。我知道根据我提供的最小示例,我似乎可以。但不幸的是,表中的行数是由用户添加的数据量决定的。

我的测试环境概述:

  • 傀儡师版本:1.19.0
  • 笑话版本:24.8.0

代码/到目前为止我尝试过的

下面你会看到我尝试了几种方法来等待所有行数据显示,但还没有任何效果。

<!-- index.html -->
<html>
  <body ng-app="myApp" ng-controller="myCtrl">
    <md-content class="tableContainer">
      <md-content class="table">
        <!-- UI component provided by Angular JS Material, appears while table is loading -->
        <md-progress-linear md-mode="indeterminate"></md-progress-linear>
        <table>
          <thead><!-- my table header --></thead>
          <tbody><!-- displays tons of data --></tbody>
        </table>
      </md-content>
    </md-content>
    <button id="reloadTableBtn" …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs jestjs angularjs-material puppeteer

1
推荐指数
1
解决办法
3048
查看次数