Ошибки JavaScript в транспортире и WebDriver / Selenium - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть сайт Angular, который загружает (https://x.y.com/) и сразу перенаправляет на (https://x.y.com/#/) [в качестве примера]). Моим первоначальным решением было загрузить Protractor в соответствии с его инструкциями и запустить его изОднако, после этого произошел сбой, я взял базовое руководство по селеновому веб-драйверу с сайта selenium и попытался запустить его. Произошла та же ошибка, поэтому я могу только предположить, что это проблема WebDriver.

Мой скрипт-транспортир довольно прост:

параметры входа:

import {browser, element, by, ExpectedConditions} from 'protractor';
import {get} from "selenium-webdriver/http";
describe('login NOTTHISONE, ##site_location## / ##username## / ##password##', function(){
    it('should login and get a token, then be able to see the site.', function(){
        var EC = ExpectedConditions;
        let siteLocation = '##site_location##';

        browser.waitForAngularEnabled(false);
        browser.get(siteLocation);
        blowser.sleep(60000);
    });
});

protractor.conf.js:

const { SpecReporter } = require('jasmine-spec-reporter');

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './src/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  directConnect: true,
  baseUrl: 'AWRONGURL',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
  },
  onPrepare() {
    require('ts-node').register({
      project: require('path').join(__dirname, './tsconfig.e2e.json')
    });
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  }
};

Архитектурастраница такова, что экран загрузки (не угловой) отображается во время загрузки приложения под углом. Затем, после загрузки страницы, угловой сайт активируется.

Проблема заключается в том, что при загрузке сайта в Protractor, Я получаю ошибки Javascript следующим образом:

ERROR TypeError: Cannot read property 'sendMessage' of undefined
    at new l (main.385b4b24313957c18fd6.js:1)
    at _a (vendor.9256f6b56fd7db28f00b.js:1)
    at va (vendor.9256f6b56fd7db28f00b.js:1)
    at Ja (vendor.9256f6b56fd7db28f00b.js:1)
    at za (vendor.9256f6b56fd7db28f00b.js:1)
    at Object.hs [as createRootView] (vendor.9256f6b56fd7db28f00b.js:1)
    at e.create (vendor.9256f6b56fd7db28f00b.js:1)
    at e.create (vendor.9256f6b56fd7db28f00b.js:1)
    at t.bootstrap (vendor.9256f6b56fd7db28f00b.js:1)
    at vendor.9256f6b56fd7db28f00b.js:1

sendMessage - это функция в моем приложении Angular. Так что-то ... Странно здесь. Когда я изменяю waitForAngularEnabled на true, Angular говорит мне, что я нене иметьУгловая страница (из-за экрана загрузки), но когда я изменяю ее на false, это вызывает эту ошибку.Должен ли я что-то добавить на страницу загрузки, чтобы успокоить транспортир?Есть ли простое решение для этого, которое не включает настройку длинных серий обратных вызовов?

Вопрос, однако: это связано со мной, пытаясь запустить Protractor на удаленном сервере?Я предполагал, что, поскольку я запускаю Protractor через веб-браузер, я могу указать его на любом сервере, который мне нравится.Если это не так, возможно, именно поэтому JavaScript не может быть найден.

Редактировать, включая мой скрипт на Python:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

# Create a new instance of the Chrome driver
driver = webdriver.Chrome(executable_path=r'C:\Program Files\chromedriver\chromedriver.exe')
# go to the google home page
driver.get("https://my.testsite.com")
# the page is ajaxy so the title is originally this:
print (driver.title)
# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_id("username")
# type in the search
inputElement.send_keys("cheese!")
# submit the form (although google automatically searches now without submitting)
inputElement.submit()
try:
    # we have to wait for the page to refresh, the last thing that seems to be updated is the title
    WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))
    # You should see "cheese! - Google Search"
    print (driver.title)
finally:
    driver.quit()

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Хорошо, похоже, с моим подходом произошли две ошибки.Сотрудник прошел и восстановил все с нуля:

  1. Я пытался запустить Protractor на удаленном сервере без сервера Selenium WebDriver, работающего на этом сервере.Это было ошибкой, хотя я не очень доволен необходимостью сделать это в первую очередь.

  2. Я не использовал 'jasmine2' в настройках protractor.conf.jsи, видимо, это было необходимо для того, как он собрал мой угловой проект.

Просто поместите это на случай, если это поможет кому-то еще.

0 голосов
/ 25 декабря 2018

Поместите свои логины внутри функции browser.wait:

browser.wait(EC.visibilityOf(element(by.id("mat-input3"))),60000).then(() => {
  browser.driver.findElement(by.id('mat-input3')).sendKeys(username);
  browser.driver.findElement(by.id('mat-input4')).sendKeys(password);
  browser.driver.findElement(by.xpath("//*[contains(text(), 'SIGN IN')]")).click();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...