2015-10-15 4 views
0

Я надеялся, если кто-то сможет помочь. Я пытаюсь написать тест против функции поиска, который, когда пользователь вводит несколько символов в поле поиска, вы получаете предложения, соответствующие введенным критериям. В моем примере ниже я вводил слова «cel» в поле поиска, и я возвращаю 3 элемента списка. Код не является ошибкой, и цикл foreach возвращает все три элемента в списке, однако 'suggestion.Click()' не выполняется, и я не знаю почему. Чтобы дать некоторый контекст, это для сайта онлайн-приветствия.Click() - не выполняется в моем цикле foreach

<li ng-click="goSearch('Autocomplete', 'keyword')" ng-bind-html="searchForMsg()" class="ng-binding">Search for <strong>"cel"</strong></li> 
    <li ng-repeat="suggestion in (suggestions = (allFacetsAutoComplete.facets | typeahead:moonpigSearchBox.term))" ng-bind-html="highlight(suggestion.DisplayName)" ng-click="selectSuggestion(suggestion)" ng-bind="suggestion.DisplayName" class="ng-binding ng-scope"><strong>cel</strong>ebration</li> 
    <li ng-repeat="suggestion in (suggestions = (allFacetsAutoComplete.facets | typeahead:moonpigSearchBox.term))" ng-bind-html="highlight(suggestion.DisplayName)" ng-click="selectSuggestion(suggestion)" ng-bind="suggestion.DisplayName" class="ng-binding ng-scope">jewish <strong>cel</strong>ebrations</li> 

[Then(@"I select the following list item '(.*)' from my search")] 
    public static void PreSelectedListOptions(string value) 
    { 
     var suggestedList = Driver.Instance.FindElements(By.CssSelector(".list-reset li")); 
     foreach(IWebElement suggestion in suggestedList) 
     { 
      if(value.Equals(suggestion)) 
      { 
       suggestion.Click(); 
      } 
     } 
    } 

And I perform a partial search for 'cel' 
And I select the following list item 'ebration' from my search 
//Note: I have just copied a part of the scenario. 

Большое спасибо

+0

но ваш код перескакивает внутри if-clause? поэтому есть предложения, которые равны вашей ценности? – drkthng

+0

Спасибо за помощь :) –

ответ

3

Нажмите не выполняется, потому что вы никогда не упускаю состояние. value - это строка. Это не веб-элемент. Вы должны сравнить текст веб-элемента шпагатом у вас есть:

if(value.Equals(suggestion.Text)) 

Также обратите внимание - вы передаете 'ebration' в качестве значения элемента списка. Я не вижу никаких элементов списка с этим точным текстом. Если вы хотите щелкнуть каждый элемент, который содержит ebration, вам необходимо проверить, suggestion.Text.Contains(value). Хотя в вашем сценарии говорится, что вы должны щелкнуть только один элемент. Нужен ли вам цикл foreach?

+1

Большое спасибо @ Сергий Березовский, который отлично работал. –

+0

Одна вещь, я все время получаю следующую ошибку: «Сообщение: элемент не найден в кеше - возможно, страница изменилась с момента ее поиска» –

+0

Да, страница может быть обновлена ​​javascript. Это распространенные проблемы с тестированием Selenium - вы можете искать 'StaleElementReferenceException' –