2015-12-22 54 views
0

我一直在試圖弄清楚如何從我的測試中爲autocomplete-light創建的下拉列表中選擇一個選項。Django - 使用硒選擇自動完成光選擇

迴應here did not work,似乎已過時。

我也試過autocomplete's code的選項。

我歸結的代碼如下: self.selenium.find_elements_by_css_selector('.yourlabs-autocomplete[data-input-id="id_branch-autocomplete"][data-value]')

其中id_branch-autocomplete是在正在輸入的數據字段的名稱。但是,它返回了一個空列表。

有沒有人在這方面取得過成功?我似乎無法找到出現在我的瀏覽器控制檯中的元素,並且我不能很好地理解CSS以從文件中推斷適當的選擇器。

+0

你能分享這個元素在DOM級別(html代碼片段或頁面鏈接)上的外觀嗎? – drets

+0

不幸的是,該網站不是現場的,我太新手了,從自動完成應用程序本身拉出相關的代碼。我正在尋找一個在野外的例子.. –

回答

0

在最後解決這個問題之前,我放棄了這三次。

硒需要等待名爲hilight的類出現在頁面上。只有當它試圖點擊它。

對於這一點,我用我從我以前的問題之一,得到期待的功能: Django: Selenium- stale element reference on browse

我會用一個簡單的,對於我的第一場開始工作,因爲它是小於恐嚇我最終方案。

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 

def wait_for_element(self, elm, by = 'id', timeout=10): 
    wait = WebDriverWait(self.driver, timeout) 
    wait.until(EC.presence_of_element_located((By.CLASS_NAME, elm))) 
    return self.driver.find_element_by_class_name(elm) 

wait_for_element(self, "highlight", "class").click() 

其中driver是用於運行測試的相應WebDriver。該類在autocomplete.js定義上線245中的版本我使用:

this.hilightClass = 'hilight';

然而,這很快被證明是無效的,因爲在連續數自動完成字段的形式將留下一個名爲highlight類,從而混淆了網絡驅動。因此,我不得不修改使用xpath,這使得它有很多功能更強大:

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 

def wait_for_element(self, elm, by = 'id', timeout=10): 
    wait = WebDriverWait(self.driver, timeout) 
    wait.until(EC.presence_of_element_located((By.XPATH, elm))) 
    return self.driver.find_element_by_xpath(elm) 
    wait_for_element(self, 
        "//span[@data-input-id='id_branch-autocomplete']/span[@data-value='1']", 
        "xpath").click() 

id_branch-autocomplete應該與任何你的領域的id是被替換,併爲@data-value='x'的數值可以是你想要哪個選項從下拉列表中選擇。第一個選項是1,第二個是2等。優秀!