使用 CasperJS 实现页面对象模式

2023-11-29

有没有人已经用 casperjs 实现了著名的“页面对象模式”,从长远来看,它对于测试可维护性非常有用?

当您必须将测试的机制和目的分开时,使用它非常非常酷。以这种方式编写测试会变得更加愉快。

有一些 ruby​​ 和 selenium 的例子:
http://blog.josephwilk.net/cucumber/page-object-pattern.html
https://code.google.com/p/selenium/wiki/PageObjects


以下是使用 CasperJS 测试登录功能的页面对象模式示例。页面对象位于名为 LoginPage.js 的文件中:

function LoginPage() {

  this.startOnLoginPage = function () {
    casper.echo("base url is : " + casper.cli.options.baseUrl);
    casper.start(casper.cli.options.baseUrl + '/login');
  };

  this.checkPage = function () {
    casper.then(function () {
      casper.test.assertUrlMatch('login', 'Is on login page');
      casper.test.assertExists('form[name="f"]', 'Login page form has been found');
    });
  };

  this.fillForm = function (username, password) {
    casper.then(function () {
      this.fill('form[name="f"]', {
        'j_username': username,
        'j_password': password
      }, false);
    });
  };

  this.submitForm = function () {
    casper.then(function () {
      this.click('form[name="f"] button[type="submit"]', 'Login submit button clicked');
    });
  };
}

然后您可以在多个测试中使用此页面对象。例如 :

phantom.page.injectJs('LoginPage.js');
var loginPage = new LoginPage();

casper.test.begin('Should login', function (test) {
  loginPage.startOnLoginPage();
  loginPage.checkPage();
  loginPage.fillForm('scott', 'rochester');
  loginPage.submitForm();
});

有关更多详细信息和完整示例:http://jsebfranck.blogspot.fr/2014/03/page-object-pattern-with-casperjs.html

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

使用 CasperJS 实现页面对象模式 的相关文章

随机推荐

  • Properties.Resources 未加载图像

    我有一个 Visual Studio 2012 C 游戏应用程序 我在项目的资源文件中拥有我正在使用的所有 png 图像 您知道为什么我可以使用 Properties Resources 访问除一个文件之外的所有文件吗 我检查了完整的文件路
  • 性能基准:PHP 生成的内容 VS。基于 AJAX 的 JavaScript 和 DOM

    对于以下非常简单的任务 从数据库查询产品列表并将其呈现在网页上 考虑两种设置 Setup1 PHP脚本查询 所有内容都构建在服务器上 并将整个页面返回给客户端 Setup2 使用 AJAX 请求内容的静态 HTML 页面骨架 接收到的内容在
  • 内置管理员帐户无权执行 Windows 10 中的某些操作

    在某个时候 我开始在 Windows 10 中遇到以下问题 当我尝试运行编译的 Windows 通用应用程序时 Microsoft Visual Studio 15 显示以下错误 无法激活 Windows 应用商店应用程序 激活请求失败 出
  • 如何传递承诺数组而不调用它们?

    我尝试将 axios 数组 如承诺 传递给函数 当我调用该方法时 我需要执行这些承诺 const arrayOfAxios axios https api github com setTimeout gt console log befor
  • 构建后无法在本地执行 Angular 应用程序

    我正在研究 Angular 的 CLI 工具 当我执行时 ng serve 该应用程序已上线并且运行良好 现在 我想将其分发到广网上并尝试通过以下方式构建它 ng 构建 verbose 这似乎有效 因为我没有看到任何错误或警告 但是 当我输
  • Firebase FCM:无效参数

    我是第一次尝试 FCM 所以只使用他们的示例代码 事实上 我什至正在发送他们的示例消息 以下代码直接来自文档 除了来自示例消息传递 android 工具的令牌 失败 exports onBroadcastCreated functions
  • 使用 os.system() 或 subprocess.call() 时如何隐藏控制台?

    我写了一些如下的声明 os system cmd do something subprocess call taskkill F IM exename exe 两者都会弹出一个控制台 如何阻止它弹出控制台 过程STARTUPINFO可以隐藏
  • 从其他对等方查询时“链码指纹不匹配”

    我在几台服务器上建立了一个网络 在其中一台服务器上 编译后的链码始终与其他服务器上的链码不同 从而导致以下消息 Error Error endorsing query rpc error code Unknown desc Error ex
  • 如何在 SQL Server 中重命名 XML 节点名称

    我的数据库中有一个表 其中有一列存储 XML 数据 由于源代码的更改 我们想要重命名一个特定的 XML 节点名称和 XML 命名空间 假设我有以下 XML
  • 在 TCL 中比较两个列表的正确方法是什么?

    我是 TCL 的新手 我编写了以下代码 set list1 1 2 3 4 set list2 1 2 8 1 if lindex list1 0 lindex list2 0 puts They are equal 但是当我打印子列表元素
  • 无法从另一个类python访问变量

    这是我的代码 应该从 设置 类中打印 self cake 和 self age from startup import Settings class Profile Settings def init self super Profile
  • 警告:赋值使指针来自整数而不进行强制转换

    这是一个很常见的问题 但我还没有得到答案 所以再次询问 我将结构体定义为 struct f lock int x struct f lock next 然后说我有一个功能 struct f lock new node struct f lo
  • docker-compose 中“无法连接到本地 MySQL 服务器”

    我有带有 MySQL 的 Laravel 应用程序 我正在尝试使用 docker compose 在 Docker 中运行它 但是当应用程序尝试连接数据库时 它会抛出 Connector php 第 55 行中的 PDOException
  • 使用 mod_rewrite 重定向和重写

    问完这个问题后 用于搜索查询的干净 URL 我尝试使用 mod rewrite 进行一些操作 RewriteCond QUERY STRING s a z NC RewriteRule s 1 NC R 301 L RewriteRule
  • 使用滑块更新散景图

    我正在尝试使用滑块来更新我的散景图 我发现使用 pandas dataframe 很难实现它 到目前为止没有找到任何例子 另一种方法是使用 columndatasource 在论坛上找到了一些示例 但仍然无法实现该功能 所以我有两列 X 轴
  • 如何正确等待 execve 完成?

    C 源代码 在 Linux Centos 6 3 上编译并运行 包含以下行 execve cmd argv envp execve不返回 但我想修改代码以知道它何时完成 所以我这样做 if child fork waitpid child
  • 使用 pybind11 嵌入 python。虚拟环境不起作用

    我正在尝试制作一个简单的 C 应用程序 它使用以下命令翻译短语googletranspython 库 所以我选择了pybind11为此目的嵌入Python 我还使用 cmake 进行代码配置 当我使用全局 python 安装时 一切正常 但
  • 使用 eigen3/sparse 的稀疏特征值

    是否有一种独特且有效的方法来查找实数 对称 非常大 比如说 10000x10000 的稀疏矩阵的特征值和特征向量Eigen3 有一个用于稠密矩阵的特征值求解器 但它没有利用矩阵的属性 例如这是对称性 此外 我不想将矩阵存储为密集的 或者 替
  • 用 C++ 制作简单的跨平台 GUI 的最佳方法是什么? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想制作一个带有非常简单的 GUI 背景图形 取消按钮和进度条 的桌面应用程序 我的主要目标是 Mac 和 Windows 使用 Visual C 2008 可以吗 任何人都可以
  • 使用 CasperJS 实现页面对象模式

    有没有人已经用 casperjs 实现了著名的 页面对象模式 从长远来看 它对于测试可维护性非常有用 当您必须将测试的机制和目的分开时 使用它非常非常酷 以这种方式编写测试会变得更加愉快 有一些 ruby 和 selenium 的例子 ht