我想测试两个用户之间的交互,使用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
});
});
});
});
(我实际上没有测试过它会起作用;我开始用这种方式写它并认为必须有更好的方法吗?!)
答案 0 :(得分:3)
让每个人从命令行
异步运行
1
我会这样做:
两个脚本:
然后脚本第一步(登录后):写聊天。 脚本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
同步客户端:
当然你需要等待超时。