2015-11-03 2 views
2

Я новичок в работе с приложениями Angular JS. Я пробовал с примерами приложений Angular JS, которые доступны в Интернете.Невозможно найти элементы в приложении Angular JS с помощью Protractor

Ссылка: Angular JS application

После изучения в сети транспортир лучший способ проверить AngularJS. Я попытался с использованием кода для поиска элементов в ссылке выше. Истрированный со всеми возможными локаторами, но неспособный поймать какой-либо веб-элемент. версия

Транспортир: 2.5.1

Код:

describe('angularjs homepage', function() { 

    it('should load the home page', function() { 
     browser.ignoreSynchronization = true 
     browser.get('http://themeforest.net/item/square-responsive-admin-app-with-angularjs/full_screen_preview/7511722'); 
     browser.driver.manage().window().maximize() 
     browser.sleep(6000); 
     element(by.xpath('.//*[@id="nav"]/li[2]/a')).click(); 
    }); 
}); 

Конфигурационный файл ::

exports.config = { 
    //The address of a running selenium server. 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
//Here we specify the name of the specs files. 
    specs: ['testspec.js'] 
} 

Ошибка:

1) angularjs homepage should load the home page 
    Message: 
    NoSuchElementError: No element found using locator: By.xpath(".//*[@id=\"na 
v\"]/li[2]/a") 
    Stacktrace: 
    NoSuchElementError: No element found using locator: By.xpath(".//*[@id=\"na 
v\"]/li[2]/a") 
    at new bot.Error (C:\Users\CP042756\AppData\Roaming\npm\node_modules\protrac 
tor\node_modules\selenium-webdriver\lib\atoms\error.js:108:18) 
    at C:\Users\CP042756\AppData\Roaming\npm\node_modules\protractor\lib\element 
.js:694:15 
    at Array.forEach (native) 
    at goog.async.run.processWorkQueue (C:\Users\CP042756\AppData\Roaming\npm\no 
de_modules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:130: 
15) 
    at process._tickCallback (node.js:356:9) 
Error 

Пожалуйста, помогите и спасибо

ответ

0

привет ваш элемент находится внутри фрейма перед и попытаться нажать на эту ссылку вы должны переключить на iframe, используя browser.switchTo(). frame («НАЗВАНИЕ ВАШЕГО IFRAME»);

Для получения дополнительной информации о Selenium Iframe

browser.switchTo().frame("preview-frame"); 
element(by.xpath('.//*[@id="nav"]/li[2]/a')).click(); 

Надеется, что это помогает

2

искомый элемент находится внутри iframe - switch to it's context перед поиском элемента:

browser.switchTo().frame("preview-frame"); 
element(by.xpath('.//*[@id="nav"]/li[2]/a')).click(); 

preview-frame это название iframe.


Как вы уже знаете, ваше приложение AngularJS загружается в этом iframe - это, вероятно, почему вы установили, что ignoreSynchronization флаг.

Я думаю, вы можете протестировать приложение без выключения синхронизации от и имеющей необходимости подправить ignoreSynchronization флаг на всех - атрибут data-ng-app устанавливается на body внутри iframe. Если перейти непосредственно к URL, откуда iframe загружается, protractor будет автоматически обнаруживать приложения AngularJS и будет работать с ним синхронно:

it('should load the home page', function() { 
    browser.get('http://iarouse.com/dist-square/v2.0.1/index.html'); 
    browser.driver.manage().window().maximize(); 

    element(by.xpath('.//*[@id="nav"]/li[2]/a')).click(); 
}); 
Смежные вопросы