使用 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 元素 的相关文章

  • 如何使用 HTML 5 实现类似 gmail 的文件上传/附件

    我记得一些支持 Ajax 之类的选项 无回发世界 文件上传 隐藏的 iframe 使用 flash 对象 尽管我仍然好奇为什么使用 SWF 以及它提供什么优势 然而 通过查看博客 HTML 5 似乎很有前途 我尝试了一些小示例 它确实有效
  • 类型错误:类扩展值未定义不是函数或 null

    尝试创建这些实体时出现以下错误 TypeError Class extends value undefined is not a function or null 我假设这与循环依赖有关 但是在使用表继承和一对多关系时应该如何避免这种情况
  • Eslint 从另一个文件确定全局变量

    我试图以这样的方式设置 ESLint 使其在对实际目标文件进行 linting 之前解析全局声明文件 这样我就不必将所有确实是全局的函数和变量声明为全局 而是让解析器弄清楚 In 一些 模块 js function do something
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • 设置双指缩放时精确的滚动位置

    我正在创建一个地图应用程序 它将标记图像放置在画布上并滚动到它 我正在使用浏览器的捏缩放和滚动来放大 缩小地图 然而 我注意到有一些奇怪的行为 我想知道如何解决它 这有点难以解释 但我们开始吧 假设您处于网页的标准缩放级别 无法进一步缩小
  • 此页面上的脚本导致 ie 运行缓慢

    问题就在标题中 IE 行为异常 并说有一个脚本运行缓慢 FF 和 Chrome 没有这个问题 我怎样才能找到问题所在 那个页面有很多JS 手动检查不是一个好主意 EDIT 这是我正在处理的一个项目的页面 但我需要一个工具来查找问题 End
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • 当我多次调用 requestAnimationFrame 时会发生什么

    我的意思是一次调用多个具有相同功能的 requestAnimationFrame function Draw DoSomething function AFunc prepare something requestAnimationFram
  • ES6继承:使用`super`访问父类的属性

    JavaScript 的super关键字 当我在 Chrome Babel TypeScript 上运行代码时 得到了不同的结果 我的问题是哪个结果是正确的 规范的哪一部分定义了这种行为 下面的代码 class Point getX con
  • 为什么我收到“在嵌套函数中通过 this 对类字段进行潜在无效的引用访问”错误

    在普通 JS 中 我的代码可以正常工作 对于这种情况 我想组件化我的Wall类应该在浏览器中显示用户上传的图像 同样 这在 vanilla JS 中正常工作 但在 JSX 中不起作用 我得到了一个potentially invalid re
  • Web组件中嵌套槽的内容不可见

    我有一个 Web 组件 它应该接受任意元素来包装其内容 虽然我可以在 Chrome 开发工具中看到插槽已正确分配 但 DOM 中什么也没有出现 以前有人见过这个问题吗 定义 class ExampleParent extends HTMLE
  • 如何动态调整jqgrid到当前窗口大小?

    如何动态调整jqgrid到当前窗口大小 基于javascript jQuery 最好的例子在这里 TinyMCE 去 http www tinymce com tryit full php http www tinymce com tryi
  • 如何为我的整个 Node.js 应用程序使用相同的 MySQL 连接?

    我有一个app js 我从那里运行我的整个应用程序 在 app js 内部 我require许多文件中都有代码 对于每个文件 我都这样做 var mysql require mysql var mclient mysql createCon
  • 如何在 webpack 中渲染嵌套的 SASS?

    采取以下CSS MyComponent color blue Button color red 以及以下 React 组件 import React from react import classes from MyComponent sc
  • 如何在画布上所有其他内容后面绘制图像? [复制]

    这个问题在这里已经有答案了 我有一块画布 我想用drawImage在画布上当前内容后面绘制图像 由于画布上已经有内容 我正在使用字面上的画布来创建包含图像的画布 因此我无法真正先绘制图像 所以我无法使用drawImage在我呈现其余内容之前
  • 摩纳哥:如何添加内联自动完成/代码建议?

    我找不到任何有关如何添加内联自动完成功能的示例 如下图所示 有人可以指导我如何在摩纳哥做到这一点吗 这可以在 v1 66 中启用 现在在 Insiders 中 The editor quickSuggestions设置现在接受内联为 配置值
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • d3.event.translate 在触摸设备的缩放上包含 NaN

    我使用 d3 为我的 svg 编写了一个自定义缩放函数 如下所示 Zoom behavior function myzoom xpos d3 event translate 0 ypos d3 event translate 1 vis a
  • 将多维数组转换为单数组(Javascript)

    我有一个对象数组 来自 XLSX js 解析器 因此其长度和内容各不相同 表示已给予项目的资助 简化后 它看起来像这样 var grants id p 1 location loc 1 type A funds 5000 id p 2 lo

随机推荐

  • 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 时 我的