5

Próbuję przetestować prosty formularz przy użyciu Selenium, WebDriver.io & Node.js (z Mocha). Więc mam coś takiego:Selenium i webdriver.io jak korzystać z executeScript?

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

Ale w konsoli mam: browser.executeScript is not a function. Jaki jest właściwy sposób wykonywania skryptu w kontekście przeglądarki przy użyciu tych narzędzi?

Odpowiedz

5

OK, szukałem w źródłach i znajdowałem /build/lib/protocol/execute.js. Przykład stamtąd:

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

Teraz wszystkie polecenia w wdio są synchroniczne (proof issue). Tak więc właściwą drogą jest:

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

expect(data.value).to.be([]); 
/* note, here^is a property with value of execution */ 
Powiązane problemy