如何测试两个交互式浏览器(例如聊天应用)

时间:2014-06-19 20:14:20

标签: casperjs

我想测试两个用户之间的交互,使用CasperJS通过远程服务器进行通信。我的应用程序不是聊天应用程序,但这是一种简单的方式来说明我想要做的事情。

所以我将登录浏览器窗口A,然后登录浏览器窗口B,然后返回浏览器窗口A我输入聊天消息,在发送按钮上调用click(),然后回到浏览器B我等待消息出现。然后写一条消息,然后返回浏览器A以确保它到达。

我在parallel browsing上发现了这个讨论,结果证明是串行的。 Serial对我来说很好,但是看起来在每个浏览器中执行多个操作会变得非常混乱。它是这样的:

A.start(...);
A.then(...);
A.then(...);
B.start(...);
B.when(...);

A.run(function(){
  B.run(function(){
    A.start(...);
    A.then(...);
    A.run(function(){
      B.start(...);
      B.run(function(){
        //and so on
        });
      });
    });
  });

(我实际上没有测试过它会起作用;我开始用这种方式写它并认为必须有更好的方法吗?!)

2 个答案:

答案 0 :(得分:3)

  

让每个人从命令行

异步运行

1

我会这样做:

两个脚本:

  • A登录脚本A
  • B登录的脚本B

然后脚本第一步(登录后):写聊天。 脚本B第一步:等待A文本然后发送答案。 脚本第二步:等待B回答等......

使用node(子进程)并行启动这两个脚本,它们将与wait() statements进行交互。

只有一个微妙的观点:等待两个页面同时呈现 - 或者登录 - (近似),因为如果其中一个冻结了一点,你就可以得到时间错误......所以也许增加waitTimeout;更安全。 (虽然对我来说,5秒默认超时应该足够了。)

您还可以使用外部文件来同步'它,但我不知道它是如何有用的,因为无论如何你都必须等待在这个文件中更新数据。

所以这个解决方案是异步的,但它确实有效。

答案 1 :(得分:2)

由于casperjs的步骤/调度性质,这不起作用。另请参阅Running multiple instances of casperjs

在您的代码示例中,B实例仅在A完成时启动,因为执行从调用run开始。

最简单的方法是编写两个单独的casperjs脚本(或一个脚本,但调用双方的不同数据)并让它们中的每一个从命令行异步运行。在linux上,我会使用nohup ... &来实现此目的。


具体的测试步骤。我认为让您的应用程序处理两个casperjs客户端同步所需的事件更容易。如果它是一个聊天应用程序,你想让两个caspers聊天,你会事先写一个对话框,其中包括客户说什么步骤。

然后,您可以使用 waitForText 同步客户端:

  1. A发送一些固定/已知文本,而B等待此固定文本出现
  2. B接收此固定文本,而A在下一步中等待B的响应(也称为已知文本)
  3. B发送下一个固定文本,A仍在等待
  4. 当然你需要等待超时。