如何在独立模式下调试 webdriverio?

I L*_*hon 4 javascript selenium node.js webdriver-io

http://webdriver.io/guide/getstarted/modes.html

我绝对会尝试使用 Chromedriver 调试 webdriverio 测试。您根本无法单步执行代码,因为 webdriverio 命令是异步的,并且浏览器会话与测试不同步。

这是令人沮丧的,因为阅读文档,似乎您需要一个像 Chai 或 wdio 这样的测试框架来生成测试,但这似乎只是为了拥有程序同步命令而需要做很多工作。

我只需要使用 webdriverio 抓取一些网站,但是使用 Chrome devtools 调试这个异步命令太难了。

有没有办法强制 webdriverio 同步运行?

前任)

var loadedPage = webdriverio.remote(options).init().url('https://google.com');

除了loadedPage未准备好并且在调试移动到下一行时未定义。

iam*_*hiv 5

好吧,WebdriverIO只是自动化框架的一颗明珠,而全面的文档是它的强项之一。正如您正确指出的那样,一切都是异步的,但是如果您来自传统的顺序编程背景,那么使用 WDIO 您还可以选择完全同步。

首先,您必须阅读一些有关JavaScript Promises 的内容,尤其是.then()函数。

var webdriverio = require('webdriverio');
var options = { desiredCapabilities: { browserName: 'chrome' } };
var client = webdriverio.remote(options);
client
    .init()
    .url('https://duckduckgo.com/')
    .setValue('#search_form_input_homepage', 'WebdriverIO')
    .click('#search_button_homepage')
    .getTitle()
    .then(function(title) {
        console.log('Title is: ' + title);
        // outputs: "Title is: WebdriverIO (Software) at DuckDuckGo"
    })
    .end();
Run Code Online (Sandbox Code Playgroud)

使用上述方法,您将始终必须链接您的命令,但您也可以在.then()语句中使用同步命令。

出于调试目的,WebdriverIO 开箱即用,带有一个设计精美的 Read-Eval-Print-Loop ( REPL inferface ) 形式的.debug() 命令。只需在您希望执行停止的位置之前将其添加到您的测试用例中,以便您可以在您选择的终端内进行调试。

!!!注意:.debug()命令的默认超时时间很短。确保你增加它。


如果你觉得上面的方法一个痛苦的-的屁股,那么为什么不使用WDIO测试亚军,让您的生活更轻松?您可以从运行向导开始:

// if you installed the package globally, or you have the wdio
// binary in your PATH
wdio config 
// or. from the root of your project
./node_nodules/.bin/wdio config
Run Code Online (Sandbox Code Playgroud)

以上将wdio.conf.js在您的项目根目录中生成文件。测试运行程序将使用它来运行您的测试用例。测试运行程序还抽象了您的 初始化.client(),您将不再需要处理它。只需选择一个框架来运行您的测试用例(Mocha、Cucumber 或 Jasmine)并开始编写您的测试。

!!!注意:从现在开始,browser将成为您的驱动程序对象。此外,请确保您已将wdio.conf.js文件配置为支持这种运行测试用例的方式:设置同步标志以支持这种方法:sync: true. 您可以通过wdio wdio.conf.js命令运行您的测试。

您的测试应如下所示(使用 Mocha):

var expect = require('chai').expect;

describe("Testing Robots Emporium Test Suite", function() {

    beforeEach(function() {
        // ==> Your setup here <==
        browser.url('http://www.kevinlamping.com/webdriverio-course-content/index.html')
        var currentUrl = browser.getUrl();
        expect(currentUrl).include("/index.html");        
    })

    it("The FAQs was rendered properly", function() {

        var height = browser.getCssProperty("ul.accordion", 'height');
        // Added a debug step just to show you how easy it is to debug
        browser.debug();
        expect(height.parsed.value).to.be.above(300);
        // The first element was expanded
        var firstItemText = browser.getText('ul.accordion li:nth-of-type(1) div');
        expect(firstItemText).to.contain('be of the metal type.');
    });

    afterEach(function() { 
       // ==> Your cleanup here <==
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我的首选方法。它为您提供了对测试用例执行的最佳控制,但如果您刚刚开始,我不建议您使用它。基本上就是上面的例子,但是所有的命令都是链接的。

!!!注意:确保sync: false为此设置了标志。

如果这有帮助,请告诉我。干杯!