У меня есть сайт 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()