vue-cli3 + электрон + хромедрайвер + селен-вебдрайвер не может найти элемент - PullRequest
0 голосов
/ 09 мая 2019

Я использую проект vue-cli (в котором установлен электронный + seleniumWebDriver), запускаю тесты с ChromeDriver.

Я продолжаю запускать chromedriver (который установлен в моем проекте vue-cli), затем я запускаю тестовый файл 'node ff.js'.

Приложение Electron запускалось на экране, но ничего не происходило. Затем дождитесь завершения процесса, результатом станет ошибка «UnhandledPromiseRejectionWarning: WebDriverError: неизвестная ошибка: файл DevToolsActivePort не существует».

Я искал в интернете его и нашел решение, которое, как утверждают другие, работает нормально. Просто добавьте «--disable-dev-shm-Использование» к параметрам Chrome. Но это все равно ошибка.

ff.js

const webdriver = require('selenium-webdriver')
const chrome = require('selenium-webdriver/chrome');

const driver = new webdriver.Builder()
  // The "9515" is the port opened by chrome driver.
  .usingServer('http://localhost:9515')
  .withCapabilities({
    chromeOptions: {
      args: ['--headless', '--disable-gpu', '--no-sandbox', '--disable-extensions', '--disable-dev-shm-usage', 'start-minimized'],
      // Here is the path to your Electron binary.
      binary: './dist_electron/mac/myapp.app/Contents/MacOS/myapp'
    }
  })
  .setChromeOptions(new chrome.Options().addArguments('--remote-debugging-port=7070'))
  .forBrowser('electron')
  .build()

driver.quit()

package.json

"devDependencies": {
    "@types/chai": "^4.1.0",
    "@types/mocha": "^5.2.4",
    "@vue/cli-plugin-babel": "^3.5.0",
    "@vue/cli-plugin-e2e-nightwatch": "^3.6.0",
    "@vue/cli-plugin-eslint": "^3.5.0",
    "@vue/cli-plugin-typescript": "^3.5.0",
    "@vue/cli-plugin-unit-mocha": "^3.5.0",
    "@vue/cli-service": "^3.5.0",
    "@vue/eslint-config-standard": "^4.0.0",
    "@vue/eslint-config-typescript": "^4.0.0",
    "@vue/test-utils": "1.0.0-beta.29",
    "babel-eslint": "^10.0.1",
    "babel-plugin-istanbul": "^5.1.3",
    "bootstrap": "^4.3.1",
    "chai": "^4.1.2",
    "chromedriver": "^73.0.0",
    "copy-webpack-plugin": "^5.0.2",
    "electron": "^4.0.0",
    "electron-rebuild": "^1.8.4",
    "eslint": "^5.8.0",
    "eslint-plugin-vue": "^5.0.0",
    "jquery": "^3.4.0",
    "mocha": "^6.1.4",
    "mochawesome": "^3.1.2",
    "node-sass": "^4.9.0",
    "nyc": "^14.0.0",
    "popper.js": "^1.15.0",
    "sass-loader": "^7.1.0",
    "selenium-webdriver": "^4.0.0-alpha.1",
    "ts-node": "^8.1.0",
    "ts-protoc-gen": "^0.9.0",
    "typescript": "^3.2.1",
    "vue-cli-plugin-electron-builder": "^1.2.0",
    "vue-template-compiler": "^2.5.21",
    "vuex-module-decorators": "^0.9.8",
    "webdriverio": "^5.8.3"
  }

пс. Я пытался с ChromeDriver@74.x.x, это все равно привело к той же ошибке.

На самом деле, я попробовал с Selenium RobotFramework и все еще нашел ту же ошибку. Я думаю, что-то было не так с моим тестовым письмом или некоторыми настройками. (Я не очень хорош в тестовом инструменте.)

Только для информации

mytest.robot

*** Settings ***
Library           Selenium2Library
Variables         vars.py

*** Test Cases ***
Foohaha
    Create Webdriver    Remote    desired_capabilities=${binary_location}    command_executor=http://localhost:9515
    Log To Console  ${item.get_attribute('innerHTML')}
    [Teardown]    Close All Browsers

P.s. Причиной, почему не Spectron, является тестер, которым я пользуюсь только Selenium.

1 Ответ

0 голосов
/ 13 мая 2019

После того, как я попробовал почти рекомендованную библиотеку тестирования. Я закончил с testcafe. Задав путь pref app к двоичному файлу моего распределенного приложения, затем настройте страницу для открытия в виде файла html в тестовом файле. Основной путь был значением по умолчанию.

Вот как я это настроил.

.testcafe-электрон-гс

{
  "mainWindowUrl": "app://./index.html",
  "electronPath": "/Users/xxx/Documents/ProjectFolder/dist_electron/mac/my-lovely-app.app/Contents/MacOS/my-lovely-app",
  "openDevTools": "true"
}

package.json

"scripts": {
    ...
    "cafe": "testcafe \"electron:/Users/xxx/Documents/ProjectFolder/.testcafe-electron-rc\" \"/Users/xxx/Documents/ProjectFolder/tests/e2e/specs/testcafe.js\""
  },
"devDependencies": {
    ...
    "selenium-webdriver": "^4.0.0-alpha.1",
    "testcafe": "^1.1.4",
    "testcafe-browser-provider-electron": "0.0.8"
  }

testcafe.js

import { Selector } from 'testcafe';

fixture(`Index page`)
  .page('/Users/xxx/Documents/ProjectFolder/dist_electron/bundled/index.html');


test('Body > Paragraph contains "Hello World!"', async testController => {

  const paragraphSelector = await new Selector('#nav > a.router-link-exact-active.router-link-active');
  const txt = await new Selector('#app > div.auth-page > div > div > div > form > fieldset:nth-child(1) > input');

  await testController.click(paragraphSelector)
            .typeText(txt, 'Peter Parker');
            // .expect(paragraphSelector.innerText).eql("Login");//.eql('Login');
});

Надеюсь, это кому-нибудь поможет.

...