Selenium & webdriver.io how to use executeScript?

I am trying to test a simple form using Selenium, WebDriver.io and 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 on the console, I have: browser.executeScript is not a function . What is the correct way to execute a script in a browser context using these tools?

+5
source share
1 answer

Ok, I searched in the sources and found /build/lib/protocol/execute.js . An 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 the commands in wdio are synchronous ( probative problem ). 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 */ 
+5
source

Source: https://habr.com/ru/post/1245801/


All Articles