2016-09-27 3 views
1

я пытался выяснить, почему .click() ниже был сбой транспортир:транспортир element.click() бросает исключение

this.clickSecondPanel = function() {  
    element(by.css('div.panels-gs.panel-top-two-gs')).click(); 
    }  

, пока я не изменил строку:

element(by.css('div.panels-gs.panel-top-two-gs')).click; 

где мой спецификации. JS выглядит что-то вроде:

var DataCardPage = require('./pageObjects/dataCard.page.js'); 
var dataCardPage = new DataCardPage(); 

describe('Clicking on the 2nd panel', function() { 

    dataCardPage.clickSecondPanel();   
    it('Should select the 2nd test panel', function() {     
     expect(dataCardPage.getSecondPanelText()).toBe('TEST123');  
    }); 

В других местах в моем коде, я использую .click() (с р десятые), так что это меня смущает.

Ошибка скверно:

Started 
[17:44:23] E/launcher - Error while waiting for Protractor to sync with the page 
: "window.angular is undefined. This could be either because this is a non-angu 
lar page or because your test involves client-side navigation, which can  interfe 
re with Protractor's bootstrapping. See http://git.io/v4gXM for details" 

Любые советы оценили ...

Боб

+1

Хмм, действительно ли тест выполняет клик? Или это больше не бросает ошибку? – Gunderson

+0

Мне тоже было интересно. Я проверю завтра утром. И, кстати, если я установлю browser.pause() и «repl» в режим линии cmd, я могу буквально отправить точно такую ​​же строку в браузер с успехом. Я ясно сделал что-то странное, или Угловое приложение неожиданно действует странно в этот момент. .. –

+0

Да, я не могу представить, как он будет щелкнуть, это определенно будет 'click()' как функция. Только я бы сказал, попробуйте переместить этот 'clickSecondPanel()' в блок 'it', не уверенный, что это влияет на поток управления? но выглядит подозрительно сам по себе. В противном случае я бы посмотрел ниже ответ и/или убедитесь, что 'ng-app' находится на , если вам не нужно указывать' rootElement' в другом месте вашей конфигурации. – Gunderson

ответ

2

Решено в комментариях выше, размещая в качестве ответа.

Мое предложение было попытаться переместить clickSecondPanel() внутри блока it. Он выглядел подозрительным сам по себе только с точки зрения «лучшей практики», поскольку у меня нет никакого кода, который находится за пределами функции жасмина, то есть it, beforeAll, afterAll и т. Д. (Даже не знаю, где я узнал эту привычку честно).

Он также, казалось, повлиял на поток управления и асинхронное выполнение, поэтому событие click() запускалось слишком рано. Это может быть частично объяснено this documentation и/или этим blog post

+1

Да, хорошо поймать! Не существует потока управления за пределами функций 'it()', 'before *' и 'after *'. – alecxe

+0

@alecxe приятно знать, спасибо. Не думайте, что я когда-либо официально знал это, просто мой код под 'it' стал лучшей практикой :) – Gunderson

1

Попробуйте использовать browser.ignoreSynchronization=true в начале вашего теста. Может быть, приложение, которое вы пытаетесь автоматизировать, не содержит в себе углов.

+0

Я буквально переместил 'dataCardPage.clickSecondPanel();' в раздел 'it()', и он сработал. Я также заметил потом, что @Gunderson уже предложил это, поэтому, возможно, вы повлияли на меня, даже если я не прочитал это. Отправьте это, как ваш ответ, @Gunderson. –

Смежные вопросы