【问题标题】:Selenium WebDriverJs is unable to create a new client with iOSSelenium WebDriverJs 无法使用 iOS 创建新客户端
【发布时间】:2013-05-10 01:36:58
【问题描述】:

我正在尝试将 Selenium WebDriverJS 与 iOS 浏览器一起使用。不幸的是,这并不像我需要的那样工作。

我已经按照iPhoneDriver wiki page 中的描述设置了“iWebDriver”项目。我已经复制了python脚本并且它有效。即使是一个小的 nodeJS 项目也可以工作,但是当我尝试从浏览器运行它时,Firefox 给了我以下错误消息。

错误:无法为此浏览器创建新客户端。 WebDriver 会话 ID 尚未定义。

我正在尝试运行的代码:

var driver = new webdriver.Builder().
    usingServer('http://localhost:3001/wd/hub').
    withCapabilities({'browserName': 'iPhone'}).
    build();

driver.get('http://www.google.com');
driver.quit();

我已经编译了 the WebDriverJs wiki page 中描述的 webdriverjs。是的,webdriver.js 已加载;)

【问题讨论】:

  • 你有没有想过这个问题?我遇到了完全相同的错误。
  • 不幸的是,webdriverJS(在浏览器中,而不是 node.js 中)似乎无法自行创建新会话。因此,您必须手动创建一个会话并在执行时将会话 ID 传递给 webdriverJS。我已经编辑了 webdriverJS 以满足我的需要。查看the comment in this listing 以了解如何访问现有会话。基本上,他们使用 GET 参数“wdurl”(主机 URL)和“wdsid”(会话 ID)。希望这会有所帮助:)
  • 老鼠,这使事情变得非常复杂,我正在制作一个 FF fox 扩展程序,出于复杂的原因,我需要用它来控制一个 IE 浏览器。当我看到 selenium 可以由 JavaScript 控制时,我非常兴奋。但这无疑使我的风帆失去了动力。
  • 使用您的 webdriverjs 模块,您是否编写了代码来创建新会话?
  • 我只是在 webdriver-code 之外创建了一个新会话。如果您不想创建新会话,您可能希望使用 POST-Data {"desiredCapabilities":{"browserName":"yourbrowser"}}(可能更多)和标头 {"Accept":"application/json; charset=utf-8"}}/session 发送请求。响应将是对yourselenium:port/someStuff/YOUR-SESSION-ID 的重定向响应。根据您触发请求的方式,您将被重定向并获得 JSON 编码的响应,或者您必须从该重定向 url 中提取会话 ID ;)

标签: javascript ios selenium selenium-webdriver


【解决方案1】:

所以我深入研究,我认为我有一个解决方案。这似乎是一个 hack,但对于 firefox 而言,我正在制作的 firefox 扩展程序到目前为止运行良好。

我编辑了webdriver.js 文件的webdriver.Builder.prototype.build

webdriver.Builder.prototype.build = function() {
  var a;
//  if(webdriver.FirefoxDomExecutor.isAvailable()) {
//    return a = new webdriver.FirefoxDomExecutor, webdriver.WebDriver.createSession(a, this.getCapabilities())
//  }
  a = new webdriver.http.CorsClient(this.getServerUrl());
  a = new webdriver.http.Executor(a);
//  if(this.getSession()) {
//    return webdriver.WebDriver.attachToSession(a, this.getSession())
//  }
//  throw Error("Unable to create a new client for this browser. The WebDriver session ID has not been defined.");
  return webdriver.WebDriver.createSession(a, this.getCapabilities());
};

基本上我强制它创建一个会话,不知道为什么需要FirefoxDomExecutor,因为它在我所做的更改后在 Firefox 和 chrome 上运行良好。 无论如何,感谢您让我走上正轨,希望这对其他人有所帮助。

【讨论】:

  • 无需修改代码;只需在本地方法中直接使用此代码即可。
【解决方案2】:

WebDriverJS 在 Node.js 中未运行时似乎无法创建新 Session。

您必须手动创建一个 Session 并为 WebDriverJS 提供 session-id 作为 wdsid GET 参数(例如urltowebdriver.html?wdsid=someID&wdurl=localhost:9000)。

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多