【问题标题】:How to test two interacting browsers (e.g. chat app)如何测试两个交互浏览器(例如聊天应用)
【发布时间】:2014-06-19 20:14:19
【问题描述】:

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

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

我在parallel browsing 上发现了这个讨论,结果是连续的。串行对我来说很好,但似乎在每个浏览器中执行多个操作会变得非常混乱。应该是这样的:

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
        });
      });
    });
  });

(我还没有实际测试过它会起作用;我开始这样写,并认为一定有更好的方法?!)

【问题讨论】:

  • 如果可以在同一浏览器的两个选项卡中执行此操作,那么我的回答 here 可能适合您。
  • @ArtjomB。谢谢,这个问题和我的基本一样。两个选项卡应该可以工作:事实上,我一直想回到这个,看看我是否可以使用 Casper 创建一个框架集,并在框架中运行 A 和 B 中的每一个。

标签: casperjs


【解决方案1】:

并让它们中的每一个从命令行异步运行

+1

我会那样做的:

两个脚本:

  • 使用 A 登录的脚本 A
  • 脚本 B 和 B 登录

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

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

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

您也可以使用外部文件来“同步”它,但我看不出它有什么帮助,因为无论如何您都必须等待该文件中的数据更新。

所以这个解决方案是异步的,但它可以工作。

【讨论】:

    【解决方案2】:

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

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

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


    至于具体的测试步骤。我认为让您的应用程序处理两个 casperjs 客户端同步所需的事件更容易。如果它是一个聊天应用程序,并且您想让两个 casper 聊天,您可以预先编写一个对话框,其中包括客户在哪一步说什么。

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

    1. A 发送一些固定/已知文本,而 B 等待此固定文本出现
    2. B 收到此固定文本,而 A 正在进行下一步并等待 B 的响应(也称为文本)
    3. B 发送下一个固定文本,而 A 仍在等待

    当然,您需要考虑等待超时。

    【讨论】:

    • 感谢 Artjom。不过,关键是我希望两个进程同步:在 A 发送消息后,我想断言 B 接收它。然后,并且只有在那时,我才希望 B 发回一条消息。按照您的建议启动的两个 CasperJS 进程以及文件系统上用于在它们之间进行通信的共享文件可能会起作用吗?
    • 基于共享文件的casperjs很难同步,因为phantomjs的fs API中没有锁机制。我建议根据您要测试的操作使用同步。我将添加一个示例。
    猜你喜欢
    • 2014-10-25
    • 2013-07-25
    • 1970-01-01
    • 2011-02-19
    • 2010-11-16
    • 2014-10-20
    • 2022-08-04
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多