【问题标题】:Selenium & webdriver.io how to use executeScript?Selenium & webdriver.io 如何使用 executeScript?
【发布时间】:2016-07-13 18:26:39
【问题描述】:

我正在尝试使用 Selenium、WebDriver.io 和 Node.js(使用 Mocha)测试一个简单的表单。所以我有这样的事情:

var webdriverio = require('webdriverio');
var expect = require('expect');

describe('Test form', function(){
    beforeEach(function() {
        browser.url('/');
    });

    it('should save object', function() {
        expect(browser.executeScript('return window.data;')).to.be([]);
    });

    afterEach(function() {
        if (this.currentTest.state !== "passed") {
            browser.saveScreenshot();
        }
    });
});

我的wdio.conf.js

var selenium = require('selenium-standalone');
var seleniumServer;

exports.config = {
    host: '127.0.0.1',
    port: 4444,

    specs: [
        'test/*.spec.js'
    ],

    capabilities: [{
        browserName: 'chrome'
    }],

    baseUrl: 'http://localhost:8080',
    framework: 'mocha',

    mochaOpts: {
        ui: 'bdd'
    },

    onPrepare: function() {
        return new Promise((resolve, reject) => {
            selenium.start((err, process) => {
                if(err) {
                    return reject(err);
                }
                seleniumServer = process;
                resolve(process);
            })
        });
    },

    onComplete: function() {
        seleniumServer.kill();
    }
};

但在控制台中我有:browser.executeScript is not a function。使用这些工具在浏览器上下文中执行脚本的正确方法是什么?

【问题讨论】:

    标签: javascript node.js selenium selenium-webdriver webdriver-io


    【解决方案1】:

    好的,我正在搜索资源并找到/build/lib/protocol/execute.js。示例:

    client.execute(function(a, b, c, d) {
        // browser context - you may not access neither client nor console
        return a + b + c + d;
    }, 1, 2, 3, 4).then(function(ret) {
        // node.js context - client and console are available
        console.log(ret.value); // outputs: 10
    });
    

    但是现在 wdio 中的所有命令都是同步的 (proof issue)。所以对我来说正确的方法是:

    var data = browser.execute(function() {
        return window.data;
    });
    
    expect(data.value).to.be([]);
    /* note, here ^ is a property with value of execution */
    

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2017-12-12
      • 2012-04-22
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2017-01-24
      • 1970-01-01
      相关资源
      最近更新 更多