javascript - 在 FireFox 和 IE 中使用 Selenium WebdriverJS 时出现问题

标签 javascript internet-explorer firefox selenium selenium-webdriver

我创建了多个 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 Server,并在代码示例中的 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 设置进行调整。

关于javascript - 在 FireFox 和 IE 中使用 Selenium WebdriverJS 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23907155/

相关文章:

jquery - 使用 JQuery 在 Internet Explorer 中进行 CORS 身份验证

css - 首次刷新 CSS 更改后,Web 浏览器未加载完整样式表?缓存?

html - IE随机打印出源代码(似乎不确定)

javascript - SignalR - 连接启动失败

javascript - TinyMCE - 未捕获的异常 : module [5] returned undefined when using local javascript file

javascript - 从数组 Javascript 中删除具有自定义索引的元素

javascript - Jquery 函数在 Internet Explorer 中只能运行一半

python - 如何使用 Python 启动具有多个选项卡的新 Firefox 窗口

html - 具有相同内容和相同样式的 Div 具有不同的虚线边框

javascript - Angular $response GET 请求删除内容类型