6

I'm trying to test a simple form using Selenium, WebDriver.io & Node.js (with Mocha). So I have something like this:

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();
        }
    });
});

My 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();
    }
};

But in console I have: browser.executeScript is not a function. What is the right way to execute script in browser context using these tools?

1 Answer 1

9

Okay, I was searching in sources and find /build/lib/protocol/execute.js. Example from there:

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
});

But now all commands in wdio are synchronous (proof issue). So the right way for me is:

var data = browser.execute(function() {
    return window.data;
});

expect(data.value).to.be([]);
/* note, here ^ is a property with value of execution */
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.