【问题标题】:Protractor on offline machine离线机器上的量角器
【发布时间】:2017-06-20 19:36:26
【问题描述】:
  • Angular 4 cli 项目 我们有私有网络和私有 npm 存储库。 (没有连接到互联网)。 所以在下载完所有模块后,我想运行 e2e 测试。

Protractor 使用 webdriver-manager 下载最新的 chrome 驱动。 但他无法下载驱动程序,所以我收到此错误:

etaddrinfo ENOTFOUND chromedriver.storage.googleapis.com chromedriver.storage.googleapis.com:443

我尝试在 protactor-config 中手动下载驱动程序:

{
  chromeDriver: "../../chromedriver.exe", // I also tried with "./chromedriver_2.30.exe"

.... }

(我不知道 chromedriver 是 protractor.config 还是 protractor 内 webdriver-manager 模块的相对路径)

但是我一直收到这个错误,我怎么能在没有互联网连接的情况下处理这个错误?

顺便说一句,考虑一下,我们在windows上开发,但是我们的ci/cd服务器(linux)如何才能得到适合linux的驱动呢??

【问题讨论】:

  • 下载chrome驱动,放到“..\node_modules\protractor\selenium\”文件夹下
  • 是的,但想想看,我部署到一个 linux 服务器,我需要从我们的私有 npm 执行 npm install 。我运行量角器后,他无法下载驱动程序。所以我需要运行一个脚本,在运行测试之前将驱动程序放在该文件夹中?

标签: selenium protractor angular-cli


【解决方案1】:

我遇到了类似的问题。在尝试了手动复制驱动程序或更改量角器模块等不同方法后,我发现最好的解决方法是安装本地 Web 服务器并提供所需的驱动程序以通过该本地服务器下载。该解决方案有效并且对于提供其他文件也很有用(例如,在“npm install”期间直接下载的文件)。步骤如下。

  • 在离线系统或该离线系统可访问的任何其他系统上安装 Apache。
  • 在在线系统上,从(https://chromedriver.storage.googleapis.com/ - 更新命令尝试访问的站点)下载驱动程序。在浏览器中访问此站点会显示一个文件 (download.xml),其中列出了针对不同平台的 Web 驱动程序的不同版本。您可以通过将该文件中显示的“密钥”附加到 URL 的末尾来下载所需的版本,例如(https://chromedriver.storage.googleapis.com/2.33/chromedriver_win32.zip) 下载适用于 windows 的 chrome 驱动程序 2.33 版。我尝试了较新的版本,但发现 2.33 可以在 Win 10(64 位)/Chrome 61 上运行。
  • 使用与密钥相同的路径手动将下载的 zip 文件复制到 Apache htdocs 文件夹中的离线系统,例如(c:\\htdocs\2.33\chromedriver_win32.zip)
  • 制作一个类似于实际站点 (https://chromedriver.storage.googleapis.com) 上的 download.xml 文件,但只列出您需要的驱动程序版本的一项。
  • 修改您的 Apache 配置文件 (conf\httpd.conf) 以将 download.xml 作为 DirectoryIndex 文件
  • 运行 Apache (bin\httpd.exe)
  • 更改您的 Windows 主机文件以添加一个条目以将 (chromedriver.storage.googleapis.com) 映射到运行 Apache 的系统的 IP。
  • 运行“ng e2e”。 “webdriver-manager update”将下载此本地驱动程序并继续测试。

【讨论】:

  • 这实际上对我有用,您可以使用除 Apache 之外的任何其他基本网络托管。
  • 很遗憾这是运行量角器所必需的。
【解决方案2】:

我遇到了类似的问题。用谷歌搜索找到了这个答案,我试过了。似乎有效。

随着量角器的最新变化,您可以使用:

ng e2e --webdriver-update=false

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我的解决方案不是最好的,但它有效。

    本地:

    • 运行webdriver-manager update 在我的示例中,我必须使用-ignore_ssl 运行它
    • 转到\node_modules\protractor\node_modules\webdriver-manager\selenium\并将所有文件(update-config.json 除外)复制到某个根文件夹
    • 提交并推送更改(我知道,我们正在将 Web 驱动程序推送到存储库,这不是最佳解决方案)

    在离线机器上 - 在我的情况下是 TFS

    • 运行 npm install
    • 将 webdrivers 复制回文件夹 node_modules\protractor\node_modules\webdriver-manager\selenium\
    • 我使用 Angular CLI 所以运行ng e2e --no-webdriver-update

    【讨论】:

      【解决方案4】:

      最好的办法是把它放在你的 angular.json 中:

      "e2e": {
        "builder": "@angular-devkit/build-angular:protractor",
        "options": {
          "webdriverUpdate": false,
          "protractorConfig": "e2e/protractor.conf.ts",
          "devServerTarget": "myproject:serve"
        },
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-10
        • 1970-01-01
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2016-08-23
        相关资源
        最近更新 更多