2013-12-19 69 views
0

我一直在爲我的網站編寫幾個使用硒的測試。但是,我還沒有找到一種方法來測試由自動完成填充的輸入文本字段。作爲示例,我想選擇在自動完成列表下拉列表中顯示的某個位置。如何使用硒和Python測試自動完成功能

這是我到目前爲止有:

driver.find_element_by_id("id_location_0").send_keys("Free City") 
driver.find_element_by_id("ui-active-menuitem").click() 

如何自動完成/自動提示功能測試硒使用Python實現?

注意:谷歌搜索是我想要做的一個很好的例子。

+0

您的意思是網頁瀏覽器的自動完成功能嗎?你爲什麼要測試它?這不是你的應用程序的一部分,是嗎?如果是關於一些AJAX調用,那麼你需要等到菜單在那裏。 'time.sleep(...)'可能是您的兩個find_element_by_id行之間的朋友。 – mawimawi

+0

這不是瀏覽器的自動完成功能。自動完成是應用程序的一部分。這些值是從數據庫中提取的。 – Frankline

+0

當從數據庫中獲取數據時,在查找元素「ui-active-menuitem」之前,您肯定需要稍等一會兒。 Selenium速度太快,並且無法看到元素,因爲它尚未從數據庫加載。給一次sleep.sleep(1)一下,它應該有所幫助。 – mawimawi

回答

0

這真的取決於應用程序,但去一般的方式可以是:

看看顯示什麼類型的元素中的自動完成列表,在谷歌這是跨越一個表的情況下,使你會做類似

driver.find_element_by_css_selector("css selector that matches all the auto complete suggestions) 

然後遍歷它們直到找到你期望的一個。

對谷歌的另一種選擇是使用的keydown事件來選擇一個選項,Enter鍵確認爲您的選擇

+0

Keydown似乎並不一直爲我工作。 Enter提交頁面。 Tab在一個領域工作過一次,但就是這樣。 –

0

下面的代碼爲我工作:

driver.find_element_by_id("id_location_0").send_keys("Free City") 
element_to_hover_over = driver.find_element_by_css_selector("ul.ui-autocomplete > :first-child ") 
hover = ActionChains(driver).move_to_element(element_to_hover_over) 
hover.perform() 
driver.find_element_by_id("ui-active-menuitem").click() 

我當然,這可以通過某種方式進行優化。

+0

這是當前文檔中使用的代碼:'self.selenium.find_elements_by_css_selector('。yourlabs-autocomplete [data-input-id =「id_fieldname-autocomplete」] [data-value]')'似乎沒有工作對我來說..只返回了一個空的列表,但也許它會幫助別人。 –