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

webdriver介绍&与Selenium RC的比较

Selenium WebDriver&WebElement简述

[Selenium+Java] How to Upload & Download a File using Selenium Webdriver

使用 Java 和 Selenium WebDriver 在表单和 iframe 中查找元素

Selenium WebDriver C#通过href路径查找元素