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

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

这令人沮丧,因为阅读文档似乎需要使用Chai或wdio之类的测试框架才能生成测试,但是要拥有过程性的同步命令,这似乎需要大量工作。

我只需要使用webdriverio爬网某些网站,但是使用Chrome devtools调试该异步命令实在太困难了。

有什么方法可以强制webdriverio同步运行?

前任)
var loadedPage = webdriverio.remote(options).init().url('https://google.com');
除外loadedPage尚未准备好,并且在调试移至下一行时未定义。

最佳答案

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

  • 异​​步方法(不使用WDIO test-runner):

  • 首先,您将需要阅读一些有关的信息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();
    

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

    出于调试目的,WebdriverIO开箱即用,具有设计精美的Read-Eval-Print-Loop(REPL inferface),形式为.debug() command 。只需将其添加到要停止执行的位置的测试用例中,以便可以在所选终端中进行调试。

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

  • 同步方法(使用WDIO test-runner):

  • 如果您发现上述方法很麻烦,那么为什么不使用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
    

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

    !!!注意:从现在开始,browser将成为您的驱动程序对象。
    另外,请确保已将wdio.conf.js文件配置为支持这种运行测试用例的方式:设置sync-flag以支持这种方式: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 <==
        });
    });
    
  • 异​​步方法(使用WDIO test-runner):

  • 这是我的首选方法。它为您提供了对测试用例执行的最佳控制,但是如果您刚刚起步,我不建议您这样做。基本上是上面的示例,但是所有命令都是链接在一起的。

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

    让我知道是否有帮助。干杯!

    09-05 14:06