[英]Issue using Selenium WebdriverJS with FireFox and IE
我創建了多個JavaScript測試,這些測試使用chromedriver在Chrome中運行測試,現在我想在FireFox和IE中運行相同的測試。 這是我的測試之一,它可以在Chrome中正常運行,沒有任何問題:
var assert = require('assert'),
test = require('selenium-webdriver/testing'),
webdriver = require('selenium-webdriver');
test.describe('Click current location button.', function () {
test.it('Seems to have worked.', function () {
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
// Open Chrome (as specified by the Capabilities above) and go to the specified web page
driver.get('website url').
then(function () {
driver.wait(function () {
console.log("Looking for username");
return driver.findElement(webdriver.By.id('user_username')).isDisplayed();
}, 5000, 'Page did not load within 5 seconds');
driver.findElement(webdriver.By.id("user_username")).sendKeys('user');
driver.findElement(webdriver.By.id("user_password")).sendKeys('pword');
return driver.findElement(webdriver.By.id("signIn")).click();
}).
then(function () {
driver.sleep(4000);
// make sure page has loaded
driver.wait(function () {
console.log("Looking for current button");
return driver.findElement(webdriver.By.id('gaz_input')).isDisplayed();
}, 5000, 'Page did not load within 5 seconds');
// Click Accept cookies to prevent issues
if (driver.findElement(webdriver.By.xpath("//a[@class='cc-cookie-accept']")).isDisplayed()) {
driver.findElement(webdriver.By.xpath("//a[@class='cc-cookie-accept']")).click();
}
driver.sleep(1000);
// Click the current location button
driver.findElement(webdriver.By.xpath("//button[@class='btn']")).click();
console.log("Looking for search results");
driver.manage().timeouts().implicitlyWait(60000);
if (!driver.findElement(webdriver.By.xpath("//div[@class='panel panel-default']")).isDisplayed()) {
driver.wait(function () {
return driver.findElement(webdriver.By.xpath("//div[@class='panel panel-default']")).isDisplayed();
}, 2000, 'Query did not complete within 60 seconds.');
}
driver.sleep(1000);
}).
then(function () {
// Close the browser
return driver.quit();
});
});
});
所以現在我想在FF和IE中運行此測試。 我以為使用FF,我要做的就是更改功能,它應該可以正常工作,但那沒有發生。 對於IE,我以為我只需要下載IEDriverServer並將其與chromedriver放在同一文件夾中,但是當我這樣做並將驅動器功能從chrome更改為Internetexplorer時,測試也不起作用。
如果在功能設置為internetexplorer時嘗試運行測試,則會出現此錯誤:
C:\Projects\build>mocha ietest.js
.
0 passing (42ms)
1 failing
1) Click current location button. Seems to have worked.:
TypeError: Object function (opt_other) {
/** @private {!Object} */
this.caps_ = {};
if (opt_other) {
this.merge(opt_other);
}
} has no method 'internetexplorer'
at Context.<anonymous> (C:\Projects\build\ietest.js:9:43)
at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Projects\build\node_modules\selenium-webdriver\lib\webdriver\promise.js:1598:20)
at webdriver.promise.ControlFlow.runEventLoop_ (C:\Projects\build\node_modules\selenium-webdriver\lib\webdriver\promise.js:1463:8)
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
==== async task ====
at Context.<anonymous> (C:\Projects\build\node_modules\selenium-webdriver\testing\index.js:126:14)
at Test.Runnable.run (C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:196:15)
at Runner.runTest (C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:374:10)
at C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:452:12
at next (C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:299:14)
at C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:309:7
at next (C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:247:23)
at Object._onImmediate (C:\Users\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:276:5)
at processImmediate [as _immediateCallback] (timers.js:330:15)
如果我將功能更改為Firefox,則會收到此錯誤:
C:\Projects\build>mocha ietest.js
.
0 passing (1s)
1 failing
1) Click MyNearest current location button. Seems to have worked.:
Error: ECONNREFUSED connect ECONNREFUSED
at ClientRequest.<anonymous> (C:\Projects\build\node_modules\selenium-webdriver\http\index.js:128:16)
at ClientRequest.EventEmitter.emit (events.js:95:17)
at Socket.socketErrorListener (http.js:1547:9)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:415:13)
==== async task ====
WebDriver.createSession()
at Function.webdriver.WebDriver.acquireSession_ (C:\Projects\build\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:131:49)
at Function.webdriver.WebDriver.createSession (C:\Projects\build\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:111:30)
at Builder.build (C:\Projects\build\node_modules\selenium-webdriver\builder.js:106:20)
at Context.<anonymous> (C:\Projects\build\ietest.js:10:3)
at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Projects\build\node_modules\selenium-webdriver\lib\webdriver\promise.js:1598:20)
at webdriver.promise.ControlFlow.runEventLoop_ (C:\Projects\build\node_modules\selenium-webdriver\lib\webdriver\promise.js:1463:8)
at wrapper [as _onTimeout] (timers.js:252:14)
at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)
==== async task ====
at Context.<anonymous> (C:\Projects\build\node_modules\selenium-webdriver\testing\index.js:126:14)
at Test.Runnable.run (C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runnable.js:196:15)
at Runner.runTest (C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:374:10)
at C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:452:12
at next (C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:299:14)
at C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:309:7
at next (C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:247:23)
at Object._onImmediate (C:\Users\akeogh\AppData\Roaming\npm\node_modules\mocha\lib\runner.js:276:5)
at processImmediate [as _immediateCallback] (timers.js:330:15)
我解決這個問題已經很長時間了,沒有任何成功,我們將不勝感激。 可能是我做得不正確,但我無法弄清楚而已。
謝謝,安東尼
對於Firefox,請參閱WebDriverJs文檔中的代碼示例, 網址為https://code.google.com/p/selenium/wiki/WebDriverJs#Using_the_Stand-alone_Selenium_Server 。 您將需要安裝獨立Selenium服務器,並在代碼示例中的pathToSeleniumJar中使用適當的值填寫。
對於IE,您可以進行類似的操作:
var webdriver = require('selenium-webdriver'),
SeleniumServer = require('selenium-webdriver/remote').SeleniumServer;
var pathToSeleniumJar = 'C:\\selenium-2.41.0\\selenium-server-standalone-2.41.0.jar';
var server = new SeleniumServer(pathToSeleniumJar, {
port: 4444
});
server.start();
var driver = new webdriver.Builder().
usingServer(server.address()).
withCapabilities(webdriver.Capabilities.ie()).
build();
這應該可以工作,因為IE驅動程序應該已經在您的路徑中了。 另請參閱https://code.google.com/p/selenium/wiki/InternetExplorerDriver,以獲取您可能需要對IE設置進行的調整。
我知道問這個問題已經有一段時間了,但是對於任何遇到此問題的人來說,這可能會有所幫助。
Selenium Server似乎尚未為您啟動。 我等待服務器啟動,然后對它執行代碼。
function startSeleniumServer(callback) {
seleniumServer = new SeleniumServer(path/to/selenium/server/jar, { port: 4444 });
var promise = seleniumServer.start();
promise.then(function() {
console.log("Selenium Server: Started");
return callback();
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.