2015-10-15 49 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子句中跳轉嗎?所以有建議是等於你的價值? – drkthng

+0

謝謝你的幫助:) –

回答

3

點擊不執行,因爲你永遠不傳遞條件。 value是一個字符串。這不是網絡元素。你應該比較網頁元素的文本字符串與您有:

if(value.Equals(suggestion.Text)) 

還要注意 - 你通過'ebration'作爲列表項的值。我沒有看到包含此​​確切文字的任何列表項目。如果您想單擊每個包含ebration的項目,則需要檢查是否suggestion.Text.Contains(value)。雖然你的場景說,你應該只點擊一個項目..你需要foreach循環嗎?

+1

非常感謝你@Sergey Berezovskiy完美的工作。 –

+0

現在有一件事我不斷收到以下錯誤消息:在緩存中找不到元素 - 可能頁面在查找後發生了變化 –

+0

是的,頁面可能會被javascript刷新。這是Selenium測試的常見問題 - 您可以搜索「StaleElementReferenceException」 –