从WebDriverJS确定会话ID

时间:2012-06-25 20:22:19

标签: javascript node.js selenium webdriver

我正在尝试在浏览器上运行WebDriverJS,但文档在如何控制主机浏览器方面有点模糊。在这里,它说:

  

启动浏览器以针对另一个浏览器运行WebDriver测试有点多余   (与简单地使用节点相比)。相反,在浏览器中使用WebDriverJS是为了   自动化浏览器实际运行脚本。只要>这可以实现。已知服务器的URL和浏览器的会话ID。虽然这些值可能是   直接传递给构建器,也可以使用wdurl和wdsid定义它们   “环境变量”,从加载页面的URL查询数据中解析:

    <!-- Assuming HTML URL is /test.html?wdurl=http://localhost:4444/wd/hub&wdsid=foo1234 -->
    <!DOCTYPE html>
    <script src="webdriver.js"></script>
    <input id="input" type="text"/>
    <script>
      // Attaches to the server and session controlling this browser.
      var driver = new webdriver.Builder().build();

      var input = driver.findElement(webdriver.By.tagName('input'));
      input.sendKeys('foo bar baz').then(function() {
        assertEquals('foo bar baz',
            document.getElementById('input').value);
      });
    </script>

我想从Node.js打开我的测试页面,然后运行客户端脚本中包含的命令。但是,我不知道在构建会话时如何能够提取会话ID(wdsid查询参数)。有没有人有任何想法?

1 个答案:

答案 0 :(得分:7)

经过大量实验和阅读WebDriverJS源代码后,终于弄明白了。

var webdriver = require('./assets/webdriver');

var driver = new webdriver.Builder().
    usingServer('http://localhost:4444/wd/hub').
    withCapabilities({
        'browserName': 'chrome',
        'version': '',
        'platform': 'ANY',
        'javascriptEnabled': true
    }).
    build();

var testUrl = 'http://localhost:3000/test',
    hubUrl = 'http://localhost:4444/wd/hub',
    sessionId;

driver.session_.then(function(sessionData) {
    sessionId = sessionData.id;
    driver.get(testUrl + '?wdurl=' + hubUrl + '&wdsid=' + sessionId);
});

driver.session_返回一个Promise对象,该对象将在实例化时包含会话数据和其他信息。使用.then(callback(sessionData))将允许您根据需要操作数据。