【问题标题】:Running multiple instances of selenium webdriver asynchronously (firefox)异步运行多个 selenium webdriver 实例(firefox)
【发布时间】:2015-09-08 23:06:18
【问题描述】:

如何让我的网络驱动程序同时请求多个页面(或打开多个浏览器)?

我在互联网上找到的所有解决方案都等到上一个会话完成加载,然后才打开浏览器的新实例。

我尝试过 selenium-webdriver、webdriverjs 和 wdjs,但它们似乎都不能异步地为不同的页面执行多个 http 请求。甚至像 https://github.com/OniOni/wd-parallel-async 这样的解决方案也行不通。他们都一次打开一个。

我错过了什么吗?

PS:我不想同时运行多个浏览器!我想运行同一个浏览器的多个实例。

【问题讨论】:

  • 我想我误解了一点网络驱动程序。是的,它们似乎每次都打开一个,但是一旦它们打开,我就可以独立管理它们。

标签: javascript node.js selenium selenium-webdriver


【解决方案1】:

类似:

WebDriver driver1 = new FirefoxDriver();
WebDriver driver2 = new FirefoxDriver();
WebDriver driver3 = new FirefoxDriver();
driver1.get("page1");
driver2.get("page2");
driver3.get("page3");

如果您需要它真正异步,那么您将需要进入 Java 线程......这将使它成为一个更长的讨论和 SO 题外话。

【讨论】:

  • 您知道 cookie 是否会在实例之间共享吗?我需要将它们隔离并拥有自己的饼干罐。
  • 每个 WebDriver driverX = new FirefoxDriver(); 都会创建一个新的 Firefox 实例,它有自己的独立配置文件......和独立的 Cookie 存储。
  • 好的,我刚刚测试过,你是对的 ;) 感谢您的反馈。
  • Chrome 和 IE 驱动是否支持类似的隔离实例?
  • 我认为这意味着您将获得每个浏览器实例的单独会话,对吗?
【解决方案2】:

使用线程。我看到您标记了 node.js...我对此并不熟悉,但下面是一个有效的 c# 示例...应该适用类似的理论。 c#

    Parallel.Invoke(
        ()=> { 1st test execution call },
        ()=> { 2nd test execution call },
        ()=> { 3rd test execution call }
    );

但要小心,因为 webdriver 有时会混淆和重叠窗口。我发现在一台机器上一次做 5 个以上会导致各种问题。如果您在 c# 中使用Parallel.Invoke,您可以限制它以一次只允许特定数量...尽管网格是最好的方法,因为您在配置中设置了限制,然后它会为您进行负载平衡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    相关资源
    最近更新 更多