使用 phantomjs/casperjs 测试 DOM 元素

2024-03-03

我有一个基于 AJAX 的 javascript 应用程序,我想对其进行接口测试。例如,我想编写一个测试来加载我的网站(从给定的 URL)并检查是否存在一些 DOM 元素(给定的 id 和给定的类)。

问题是当我在浏览器中输入 URL 时,我的应用程序有一个Loading...显示标签并在下面发送 AJAX 请求。当 AJAX 响应到达时,会进行一些处理并显示正确的网页内容(Loading...标签被隐藏)。到目前为止我已经得到了这段代码:

casper.test.begin('Main page test', 2, function suite(test) {

    casper.start('http://xxx.yyy.zzz/', function() {
        test.assertTitle('My page name', 'page title is set correctly');
    });

    casper.then(function() {
        test.assertExists('#tabsListArea', 'tabs area is found');
    });

    casper.run(function() {
        test.done();
    });
});

这是我收到的错误消息:

FAIL tabs area is found
#    type: assertExists
#    file: mypath/.../casperjs/casper-test.js:11
#    code: test.assertExists('#tabsListArea', 'tabs area is found');
#    subject: false
#    selector: "#tabsListArea"
⚠  looks you did not use begin() which is mandatory since 1.1

有人可以指出我该怎么做才能让 phantomjs/casperjs 等待 AJAX 响应到达并由 JS 引擎处理,以便我可以做出所有断言吗?


您是否尝试过任何 waitFor 函数?你可以尝试这样的事情:

casper.test.begin('Main page test', 2, function suite(test) {

    casper.start('http://xxx.yyy.zzz/', function() {
        test.assertTitle('My page name', 'page title is set correctly');
    });

    casper.waitFor(function check() {
        return this.evaluate(function() {
            return $('loading label').is('hidden');
        });
    }, function then() {    // step to execute when check() is ok
        test.assertExists('#tabsListArea', 'tabs area is found');
    }, function timeout() { // step to execute if check has failed
        this.echo("Timeout: page did not load in time...").exit();
    });

    casper.run(function() {
       test.done();
   });
});

然后,您可以使用 waitTimeout 选项,以便为页面提供足够的时间来加载。这不是一个完美的解决方案,但在这种情况下它可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 phantomjs/casperjs 测试 DOM 元素 的相关文章

  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 从函数返回函数的目的是什么?

    阅读一些遗留代码 发现 A prototype setSize function var v1 new Vector2 return function size var halfSize v1 copy size multiplyScala
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • 使用 Node.js 构建网站的最佳实践

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我想知道如何使用 Node js 从头开始 开发一个网站 我明白我怎么能possibly
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 改变 JavaScript 中的顶部填充

    以下是我在 css 中设置顶部填充的方法 body font size font size px margin 0 padding 100px 0 20px 0 width 100 important 如何使用最简单的 javascript
  • 使用 Google 日历源时如何禁用 FullCalendar 中的活动链接?

    我正在使用 FullCalendar 库从 Google 日历加载日历中的事件 不幸的是 事件添加到日历后 它们是可点击的 当您点击该活动时 您会自动重定向到 Google 日历页面以查看该特定活动 或者如果您有足够的访问权限 则可以直接对
  • Vaadin 12 将对象传递给 JavaScript 函数:无法对类进行编码

    Vaadin 12 Kotlin 项目 In my myPage html我有JavaScript myObject redirectToCheckout sessionId 1111 2222 所以我需要调用javaScript函数red
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用javascript动态更新css内容

    需要将 css 更新为动态值 我不确定最好的方法是什么 div style zoom 1 div 缩放级别将根据窗口大小调整触发 应用程序将相应缩放 我将此应用程序加载到 cordova 中并让它在 iPAD 中运行 然后我意识到需要使用
  • Highcharts jQuery 渲染问题 - 所有浏览器

    我在尝试使用构建堆积柱形图时遇到了一个奇怪的问题高图表 http www highcharts com 当图表呈现时 在您调整浏览器大小之前 不会显示列无论如何 导致图表重绘 我认为 图表的其余部分显示 轴 标题等 但不显示列本身 我在 I
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 有没有办法使用 ko.observableArray 作为地图?

    有没有办法使用ko observableArray http knockoutjs com documentation observableArrays html像地图 字典一样 例如 var arr ko observableArray
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo

随机推荐

  • ASP.NET Core 应用程序中project.json 中的构建选项下的preserveCompilationContext 有什么用?

    我是 ASP NET Core 新手 我试图了解 project json 中的各种选项 但无法理解其含义保留编译上下文 true在project json 中的构建选项下 据微软称文档 https learn microsoft com
  • 如何将 HSB 转换为 RGB

    我有一台德尔福XE2项目 https stackoverflow com questions 17729550 how can you change the font color using timer control改变Label01 F
  • 捏合缩放 ListView Android

    我正在尝试在 Android 上实现捏合放大列表视图 当我单击并拖动缩放的列表视图时遇到问题 首先 这是代码 public class ScaleListView extends ListView private ScaleGestureD
  • NSOrderedSet 生成的访问器中抛出异常

    在我的 Lion 应用程序上 我有这个数据模型 关系subitems inside Item 已订购 Xcode 4 1 内部版本 4B110 已为我创建了该文件Item h Item m SubItem h and SubItem h 这
  • Vue 3 Teleport 只能在 vue 之外移植吗?

    Vue 3 有一个新的 Teleport 功能 它取代了 vue 2 中的 Portal vue 插件 但是 我发现无法将组件移植到由 vue 控制的位置 在 vue 应用程序中 它仅在移植到外部 主体 其他元素 时才有效 const ap
  • Joomla 数据库 - 如何在 getQuery 中使用 LIMIT?

    我想使用 joomla 内置数据库类构建以下查询 SELECT FROM table name ORDER BY id DESC LIMIT 1 这是我到目前为止建立的查询 db JFactory getDBO query db gt ge
  • 为什么 setTimeout() 在 Chrome DevTools 下使我的调用堆栈变得混乱?

    我有一个函数 在完成后使用 setTimeout 重新排队 有人可以解释为什么 Chrome DevTools 让它看起来像是递归调用自己吗 我的理解是每次调用的调用堆栈都应该清晰 举这个非常简单的例子 第一次命中断点时 我看到 经过 3
  • Pandas:无法附加和重新分配到函数内的 DataFrame

    我想要做的是附加到一个 DataFrame 该 DataFrame 作为参数传递给函数 类似于以下代码中按函数完成的操作f df pd DataFrame data 0 1 0 1 columns a b df Out 58 a b 0 0
  • 如何删除 Django 自动生成的 ManyToMany 表中的冗余 ID 字段?

    我的班级有两节课models py file class Person person name models CharField max length 50 class Course course name models CharField
  • iPhone:检测自上次屏幕触摸以来用户不活动/空闲时间

    有没有人实现了一项功能 如果用户在一段时间内没有触摸屏幕 您会采取特定的操作 我正在努力找出最好的方法来做到这一点 UIApplication 中有这个有点相关的方法 UIApplication sharedApplication idle
  • 如何定义多重复合函数?

    有没有一种方法可以定义一个 Haskell 函数 它接受函数 某种集合 并生成单个函数 它们从右到左的组合 I tried foldr 但这只接受其结果与其参数具有相同类型的函数列表 foldr a gt a gt a gt a 所以 我可
  • 在 Amazon EC2 Windows 实例中自动挂载 EBS 卷

    有谁知道如何自动挂载弹性块存储 http aws amazon com ebs 在 Amazon 中启动 Windows 2003 实例时的 EBS 卷弹性计算云 http aws amazon com ec2 EC2 Setup 确保 E
  • 在 IntelliJ Idea 中调试时避免 Groovy/Grails 内部机制

    我正在使用 IntelliJ Idea 8 1 2 进行 Grails 开发 Groovy 的动态特性让我很难调试代码 我总是陷入 Groovy Grails 的内部 即 CachedMethod ExpandoMetaClass 等 例如
  • 不包含多个特定单词的字符串的正则表达式

    我正在尝试组合一个正则表达式来查找特定单词don t存在于字符串中 具体来说 我想知道什么时候 主干 标签 或 分支 不存在 这是针对 Subversion 预提交挂钩 基于正则表达式匹配不包含单词的字符串 https stackoverf
  • DLL 的配置文件

    我们的应用程序在运行时从应用程序的根加载我们的自定义 DLL 这些 DLL 正在实现某些接口 并通过反射执行方法 如果自定义 DLL 必须从配置文件中读取某些值 那么我们必须将这些配置设置复制到主应用程序的 app config 文件中 有
  • Scrapy Image Pipeline:如何重命名图像?

    我有一个蜘蛛可以获取数据和图像 我想用我正在获取的相应 标题 重命名图像 以下是我的代码 蜘蛛1 py from imageToFileSystemCheck items import ImagetofilesystemcheckItem
  • .cpp 文件和 .h 文件有什么区别?

    因为我已经做了 cpp文件 然后将它们传输到 h文件 我能找到的唯一区别是你不能 include cpp文件 我缺少什么区别吗 C 构建系统 编译器 不知道有什么区别 所以这都是约定之一 约定是 h文件是声明 并且 cpp文件是定义 这就是
  • 数据原子查询性能改进

    我在 Datomic 数据库中有一个与此类似的架构 tenant db id db id db part db db ident tenant guid db unique db unique identity db valueType d
  • Bootstrap 折叠力 全部展开

    我有很多不同的部分 它们有自己的折叠元素 我已经实现了 jquery 来展开和折叠它们 jQuery collapse each function index this collapse toggle HTML 片段 ul class na
  • 使用 phantomjs/casperjs 测试 DOM 元素

    我有一个基于 AJAX 的 javascript 应用程序 我想对其进行接口测试 例如 我想编写一个测试来加载我的网站 从给定的 URL 并检查是否存在一些 DOM 元素 给定的 id 和给定的类 问题是当我在浏览器中输入 URL 时 我的