2015-04-01 1 views
1

В настоящее время я пишу приложение, используя Angular. Я делаю запрос GET API и с возвращаемыми данными я помещаю маркеры на карту google. Я решил использовать библиотеку карт углового google для этого приложения - http://angular-ui.github.io/angular-google-maps/#!/пробник для испытаний на транспортирщик googlemaps

У меня возникли некоторые проблемы, пытаясь провести сквозное тестирование с использованием транспортира. Одна простая вещь, но доказывающая невозможность, заключается в том, что я хочу получить текст из поля ввода на моей карте.

Мой код выглядит следующим образом:

<html ng-app="hailoApp"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Hailo-App</title> 
    <link rel="stylesheet" href="/css/style.css"> 
    <script src='http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false&language=en&v=3.17'></script> 
    <script src="bower_components/angular/angular.js"></script> 
    <script src="bower_components/jquery/dist/jquery.js"></script> 
    <script src="bower_components/angular-route/angular-route.js"></script> 
    <script src="bower_components/lodash/dist/lodash.compat.js"></script> 
    <script src="bower_components/angular-google-maps/dist/angular-google-maps.js"></script> 
    <script type="text/javascript" src="bower_components/angular-mocks/angular-mocks.js"></script> 
    <script src="js/hailo.js"></script> 
</head> 

    <body ng-controller="mapController"> 

    <header> 
     <div id="logo"></div> 
    <nav> 
     <ul> 
     <li>DRIVERS</li> 
     <li>DOWNLOAD</li> 
     <li>GITHUB</li> 
     </ul> 
    </nav> 
    </header> 

    <div ng-show='view == 1' id="arrival_time"> 
    <p>ETA is:</br> {{ETA}}</p> 
    </div> 
    <div ng-show='view ==2' id="exist_false"> 
    <p>No Such Location</p> 
    </div> 

    <div id="map_canvas"> 
    <ui-gmap-google-map center="map.center" zoom="map.zoom" draggable='true' options="options" events='map.events'> 
    <ui-gmap-marker coords="marker.coords" icon="marker.icon" idkey="1" id="user" options='marker.options'></ui-gmap-marker> 
    <ui-gmap-marker ng-repeat="marker in drivers" idkey="2" coords="marker" id="taxi"> 
    </ui-gmap-marker> 
    <ui-gmap-search-box template="searchbox.template" events="map.events" position="searchbox.position"></ui-gmap-search-box> 
    </ui-gmap-google-map> 
    </div> 

    <script type="text/ng-template" id="searchbox.tpl.html"> 
     <form> 
      <input type="text" placeholder="ENTER LOCATION" id="searcher"> 
     </form> 
    </script> 
    </body> 
</html> 

Моего контроллер содержит следующий код, относящийся к полю ввода:

$scope.searchbox = { 
    template: 'searchbox.tpl.html', 
    events: $scope.map.events, 
    position: 'TOP_LEFT' 
    }; 

Кто-нибудь знает, как я мог бы написать тест транспортира для целевой SearchBox , поэтому я могу ввести текст и затем отправить его, после чего я могу издеваться над ответом API? Я искал везде и пробовал все, но не мог этого решить.

Спасибо, Павел

ответ

2

Для насмешливого API вызовов есть удобный protractor-http-mock library, который я лично использую.

Для ввода текста в поле поиска и представить, вы можете использовать:

var searcher = element(by.id("searcher")); 

searcher.sendKeys("Location"); 
searcher.submit(); 

Или:

searcher.sendKeys("Location"); 
searcher.sendKeys(protractor.Key.ENTER); // or protractor.Key.RETURN 

Кроме того, вам могут понадобиться использовать Явные ждать, чтобы дождитесь появления input перед взаимодействием с элементом. browser.wait() с presenceOf Expected Condition должно помочь:

var EC = protractor.ExpectedConditions; 
browser.wait(EC.presenceOf(searcher), 10000, "Searcher was not found") 

searcher.sendKeys("Location"); 
+0

Благодаря Alecxe, когда я бегу транспортир я получаю ошибку NoSuchElementError: Ни один элемент не найден с помощью локатора: By.id («искатель») Похоже, что она не в состоянии получить доступ что элемент –

+0

@PaulFitzgerald благодарит, как насчет использования 'element (by.tagName (" ui-gmap-search-box "));' вместо 'element (by.id (" searcher "))'? – alecxe

+0

О, я думал, что это сработает. Еще одна ошибка: NoSuchElementError: Элемент не найден с помощью локатора: By.tagName («ui-gmap-search-box») –