Webdriver.io 崩溃并显示 NoSessionIdError

Webdriver.io crashes with NoSessionIdError

提问人:Travis 提问时间:9/12/2015 更新时间:6/9/2021 访问量:6090

问:

我试图让 webdriver.io 和茉莉一起工作。

按照他们的示例,我的脚本位于(根据配置)并包含:test/specs/first/test2.js

var webdriverio = require('webdriverio');


describe('my webdriverio tests', function() {

    var client = {};
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 9999999;

    beforeEach(function() {
        client = webdriverio.remote({ desiredCapabilities: {browserName: 'firefox'} });
        client.init();
    });

    it('test it', function(done) {
        client
            .url("http://localhost:3000/")
            .waitForVisible("h2.btn.btn-primary")
            .click("h2.btn.btn-primary")
            .waitForVisible("h2.btn.btn-primary")
            .call(done);
    });

    afterEach(function(done) {
        client.end(done);
    });
});

我使用 wdio 作为测试运行程序,并使用交互式设置进行设置。该配置是自动生成的,而且非常简单,所以我认为没有必要发布它。

在另一个终端窗口中,我正在使用 Java 7 运行 selenium-server-andalone-2.47.1.jar。我的计算机上确实安装了 Firefox(运行测试时它会空白启动),并且我的计算机运行的是 OS 10.10.5。

这是我启动测试运行程序时发生的情况:

$ wdio wdio.conf.js 


=======================================================================================
Selenium 2.0/webdriver protocol bindings implementation with helper commands in nodejs.
For a complete list of commands, visit http://webdriver.io/docs.html. 
=======================================================================================

[18:17:22]:  SET SESSION ID 46731149-79aa-412e-b9b5-3d32e75dbc8d
[18:17:22]:  RESULT      {"platform":"MAC","javascriptEnabled":true,"acceptSslCerts":true,"browserName":"firefox","rotatable":false,"locationContextEnabled":true,"webdriver.remote.sessionid":"46731149-79aa-412e-b9b5-3d32e75dbc8d","version":"40.0.3","databaseEnabled":true,"cssSelectorsEnabled":true,"handlesAlerts":true,"webStorageEnabled":true,"nativeEvents":false,"applicationCacheEnabled":true,"takesScreenshot":true}
NoSessionIdError: A session id is required for this command but wasn't found in the response payload 
    at waitForVisible("h2.btn.btn-primary") - test2.js:21:14 

/usr/local/lib/node_modules/webdriverio/node_modules/q/q.js:141
                throw e;
                      ^
NoSessionIdError: A session id is required for this command but wasn't found in the response payload



0 passing (3.90s)


$

我觉得这很奇怪和莫名其妙,特别是考虑到它甚至打印会话 ID。

有什么想法吗?

JavaScript web驱动程序-io

评论


答:

6赞 ChristianB 9/15/2015 #1

请查看 wdio 测试运行程序上的文档。您无需自行使用 init 创建实例。wdio 测试运行程序负责为您创建和结束会话。

您的示例涵盖了独立的 WebdriverIO 用法(不带测试运行程序)。您可以在此处找到使用 wdio 的示例。

澄清一下:有两种使用 WebdriverIO 的方法。您可以自己将其嵌入到您的测试系统中(将其用作独立/或刮板)。然后,您需要处理一些事情,例如创建和结束实例或并行运行这些实例。使用 WebdriverIO 的另一种方法是使用其名为 wdio 的测试运行程序。测试运行程序获取一个配置文件,其中包含有关测试设置的大量信息,并在 Sauce Labs 上生成实例、更新作业信息等。

评论

0赞 Travis 9/16/2015
你是对的。我正在查看独立示例而不是 wdio 示例。
2赞 mucaho 12/1/2015 #2

每个 Webdriver 命令都是异步执行的。 您在测试中和测试中正确地调用了回调,但忘记在以下位置执行此操作:doneafterEachtest itbeforeEach

beforeEach(function(done) {
    client = webdriverio.remote({ desiredCapabilities: {browserName: 'firefox'} });
    client.init(done);
});