使用 Selenium 测试 AngularJS

2023-12-02

我在 ASP MVC + AngularJS 堆栈上有一个 SPA 应用程序,我想测试 UI。 现在我正在尝试 Selenium 与 PhantomJS 和 WebKit 驱动程序。

这是一个示例测试页面 - 具有单个元素的视图。清单项目<li>从服务器动态加载并受 Angular 限制。

<div id="items">
    <li>text</li>
    <li>text2</li>
</div>

我试图通过测试,但这一行有错误:

_driver.FindElements(By.TagName('li'))

此时没有加载的元素,并且 driver.Page Source 不包含元素。

我怎样才能等待物品加载?请不要建议Thread.Sleep()


这将等待页面加载/jquery.ajax(如果存在)和 $http 调用,以及任何伴随的摘要/渲染周期,将其放入实用程序函数中并等待。

/* C# Example
 var pageLoadWait = new WebDriverWait(WebDriver, TimeSpan.FromSeconds(timeout));
            pageLoadWait.Until<bool>(
                (driver) =>
                {
                    return (bool)JS.ExecuteScript(
@"*/
try {
  if (document.readyState !== 'complete') {
    return false; // Page not loaded yet
  }
  if (window.jQuery) {
    if (window.jQuery.active) {
      return false;
    } else if (window.jQuery.ajax && window.jQuery.ajax.active) {
      return false;
    }
  }
  if (window.angular) {
    if (!window.qa) {
      // Used to track the render cycle finish after loading is complete
      window.qa = {
        doneRendering: false
      };
    }
    // Get the angular injector for this app (change element if necessary)
    var injector = window.angular.element('body').injector();
    // Store providers to use for these checks
    var $rootScope = injector.get('$rootScope');
    var $http = injector.get('$http');
    var $timeout = injector.get('$timeout');
    // Check if digest
    if ($rootScope.$$phase === '$apply' || $rootScope.$$phase === '$digest' || $http.pendingRequests.length !== 0) {
      window.qa.doneRendering = false;
      return false; // Angular digesting or loading data
    }
    if (!window.qa.doneRendering) {
      // Set timeout to mark angular rendering as finished
      $timeout(function() {
        window.qa.doneRendering = true;
      }, 0);
      return false;
    }
  }
  return true;
} catch (ex) {
  return false;
}
/*");
});*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Selenium 测试 AngularJS 的相关文章

随机推荐

  • 电子邮件中支持 JavaScript 吗?

    电子邮件中支持 JavaScript 吗 http en wikipedia org wiki Comparison of e mail clients 老客户 例如 Lotus Notes Mozilla Thunderbird Outl
  • Visual Studio 2008 中的“文件另存为”对话框问题

    我正在通过 Visual Studio 2008 进行编程 我更改了 html 页面并使用 Ctrl S 保存它 然后在浏览器上按 Ctrl F5 进行测试 我的问题是 当我在刷新浏览器后将文件保存在 VS 中时 会出现 文件另存为 对话框
  • 使用php在浏览器中显示.msg文件

    我已在 php 应用程序中附加了 Outlook 消息文件 我将该文件存储在 SQL Server 数据库中 现在我想从浏览器打开并显示它 我尝试了这段代码 if ext msg header ContentType application
  • 如何使用 jQuery 获取整个页面的 HTML?

    I used document html 但这引发了错误 有没有办法获得一切 你可以尝试 html html 如果您还想捕获 html 标签 您可以将它们连接到 html 如下所示 function getPageHTML return h
  • pandas 如何在时间序列数据上“get_dummies”

    如果我有一些时间序列数据 弥补一些 import numpy as np import pandas as pd np random seed 11 rows cols 50000 2 data np random rand rows co
  • 使用 segue 设置详细视图控制器

    背景 我有一个自定义 UIViewController 类 我在其中使用自定义注释填充 MKMapView 当用户选择注释时 会显示有关该注释的详细信息 并且还会显示一个按钮 供用户选择并调出另一个 UIViewController 其中包
  • 重播非循环 gif 图像

    我有一个非循环 gif 我将其用作两个 JLabel 的 ImageIcon 但不同时使用 我的问题是 当我将第二个 JLabel 的图标设置为 gif 时 动画已经播放过 因此它只显示最后一帧 您知道当 gif 设置为第二个 JLabel
  • VBA 中的哨兵对象

    我在网络上和我自己的项目中普遍看到具有以下模式的代码 Sub Func Application EnableEvents False some code Application EnableEvents True End Sub 自从有生以
  • 我自己的驱动程序是否需要 Windows 7 x64 中的数字签名

    我已经创建了驱动程序来在 Windows 7 x64 上挂接 ssdt 我怀疑是否需要对驱动程序进行数字签名才能在 x64 上以内核模式安装 否则我只需要 Windows 驱动套件即可安装它 除了 Windows Driver Kit WD
  • 获取维度长度,C# 数组

    int arr new int 2 5 var rows arr var cols arr Assert Equals 3 rows Assert Equals 6 cols 您可以使用GetLength some dimension st
  • 用于验证 IPv4 和 IPv6 地址(无主机名)的 JavaScript 正则表达式

    请建议一个可以验证的 JS 正则表达式 IPv4地址 IPv6地址 该正则表达式应该只验证地址而不验证主机名 我有完全相同的需要 所以我改编了正则表达式丹尼尔的精彩回答 这是我能找到的最准确的 不验证主机名 这里是 var expressi
  • Mongodb 带条件聚合查找

    我有一个名为article category其中存储所有article id属于以下类别category id像这样的数据格式 集合 1 article category article id 2015110920343902 all ca
  • Opencv cv::waitKey() 返回值

    我正在 Ubuntu 14 上调试一些使用 OpenCV 的 C 代码 已知该代码可以在 Ubuntu 12 上运行 也可能与其他 OpenCV 库构建一起运行 之前是什么 int key pressed waitKey 0 cout lt
  • getElementsByTagName() 相当于 textNodes

    有什么办法可以得到全部的集合吗textNode文档中的对象 getElementsByTagName 对于 Elements 来说效果很好 但是textNodes 不是元素 Update 我意识到这可以通过遍历 DOM 来完成 正如下面许多
  • 如何使用空手道功能文件中的 .js 文件中的参数调用 Javascript 函数

    可以说我在functions js 文件中创建了javascript 函数 function getReviews reviews var length reviews reviews length return length review
  • 从 Windows 7 中的 php 命令行脚本复制到剪贴板

    我有一个 php 5 5 脚本 我在 Windows 7 中从命令行运行该脚本 如下所示 C php 5 5 5 php exe C scripts putString php 我的问题是 是否可以将脚本中的内容复制到 Windows 剪贴
  • 使用 Guice Custom Scopes 和 Jersey 进行多租户

    我正在使用 Guice for DI 与 Jersey 开发多租户应用程序 我也使用 Dropwizard 但我认为这在这里并不重要 令我困扰的一件事是 某种tenancy id我的申请中到处都是 我的大多数网址如下所示 tenancy i
  • 合并两个具有复杂条件的 pandas 数据框

    我想合并两个数据框 让我们考虑以下两个 df df1 id A ts A course weight id1 2017 04 27 01 35 30 cotton 3 5 id1 2017 04 27 01 36 05 cotton 3 5
  • 如何在 Tomcat 的 web.xml 中映射欢迎文件的过滤器?

    我创建了一个Filter检查Cookies 与请求对象和forward相应的请求感谢this and this问题 现在我想映射这个Filter只是为了welcome file正如我在中声明的那样web xml 说我有welcome fil
  • 使用 Selenium 测试 AngularJS

    我在 ASP MVC AngularJS 堆栈上有一个 SPA 应用程序 我想测试 UI 现在我正在尝试 Selenium 与 PhantomJS 和 WebKit 驱动程序 这是一个示例测试页面 具有单个元素的视图 清单项目 li 从服务