【问题标题】:Can I run a functional test using theintern js framework without setting up a standalone selenium server?我可以在不设置独立 selenium 服务器的情况下使用实习生 js 框架运行功能测试吗?
【发布时间】:2015-01-31 17:45:44
【问题描述】:

我有一个适用于我的 html 页面的 webdriver javascript 测试脚本,该脚本使用 ChromeDriver 运行,无需启动 selenium 独立服务器:

test.js

'use strict';

var path = require('path');
var webdriver = require('selenium-webdriver');
var chrome = require('selenium-webdriver/chrome');

var options = new chrome.Options();
var logging_prefs = new webdriver.logging.Preferences();
logging_prefs.setLevel(webdriver.logging.Type.BROWSER, webdriver.logging.Level.ALL);
options.setLoggingPrefs(logging_prefs);

var driver = new webdriver.Builder().withCapabilities(options.toCapabilities()).build();

driver.get('file://' + path.resolve('./index.html'));
// Do some testing
driver.quit();

我想将此测试移植到使用 theintern.io,但我不希望必须运行独立的 selenium 服务器。这可能吗?

[编辑:添加有关错误和实习配置的信息]

我看到错误 [POST http://localhost:4444/wd/hub/session] connect ECONNREFUSED 我猜是因为我没有运行独立服务器。

我的实习生配置如下:

define({
  environments: [
    { browserName: 'chrome' }
  ],

  // Name of the tunnel class to use for WebDriver tests
  tunnel: 'NullTunnel',

  // Non-functional test suite(s) to run in each browser
  suites: [ /* 'myPackage/tests/foo', 'myPackage/tests/bar' */ ],

  // Functional test suite(s) to run in each browser once non-functional tests are completed
  functionalSuites: [ 'tests/functional/index' ],

  // A regular expression matching URLs to files that should not be included in code coverage analysis
  excludeInstrumentation: /^(?:tests|node_modules)\//
});

我的实习生测试是这样的:

define([
  'intern!object',
  'intern/chai!assert',
  'require'
], function (registerSuite, assert, require) {
  registerSuite({
    name: 'index',

    'first test': function () {
      return this.remote
        .get(require.toUrl('index.html'))
        ... //more test logic
    }
  });
});

【问题讨论】:

  • 所以,澄清一下,您是否已经在运行 ChromeDriver,或者您现有的测试环境是否在运行测试时启动了 ChromeDriver 服务器?
  • 我没有启动单独的服务器或类似的东西。我使用 brew 安装了最新的 ChromeDriver,并使用 node test.js 运行 test.js 脚本,它似乎可以正常工作。据我了解,我直接连接到 ChromeDriver,而不是通过 selenium 服务器 java 进程(我使用了these 指令)。

标签: selenium-webdriver selenium-chromedriver intern


【解决方案1】:

Intern 使用标准的 WebDriver 协议,因此可以与任何实现该规范的服务器一起使用,而不仅仅是 Selenium。在这种情况下,如果您尝试连接到 ChromeDriver,只需确保它首先运行 (chromedriver --port=4444 --url-base=wd/hub),然后运行 ​​intern-runner config=mid/of/config,您应该可以使用当前的配置。

【讨论】:

  • 嗯,好的,我明白了 - 这非常有用 - 谢谢。你知道当我调用new webdriver.Builder()...build() 时,ChromeDriver http 服务器是否在我的原始脚本中启动?我想不是,它完全消除了 http,只是直接调用 ChromeDriver API。实习生是否支持类似的东西,还是只能通过 HTTP 驱动 webdriver API?
  • WebDriver specification 要求使用 HTTP 进行通信(第 2.1 节)。您可以编写一个启动本地进程的Dig Dug“隧道”。如果您这样做,请提交拉取请求! :)
  • 感谢您的链接。目前我正在使用带有“directConnect: true”选项的量角器,这样就无需运行单独的 http 服务器。如果有机会,我可能会看看向实习生添加直接连接模式会涉及什么,但目前,Protractor 似乎可以完成这项工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多