Selenium & webdriver.io 如何使用 executeScript?
Posted
技术标签:
【中文标题】Selenium & webdriver.io 如何使用 executeScript?【英文标题】:Selenium & webdriver.io how to use 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
。使用这些工具在浏览器上下文中执行脚本的正确方法是什么?
【问题讨论】:
【参考方案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 */
【讨论】:
以上是关于Selenium & webdriver.io 如何使用 executeScript?的主要内容,如果未能解决你的问题,请参考以下文章
[Selenium+Java] How to use IntelliJ IDEA & Selenium Webdriver
Selenium WebDriver&WebElement简述
[Selenium+Java] How to Upload & Download a File using Selenium Webdriver