在最後解決這個問題之前,我放棄了這三次。
硒需要等待名爲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
等。優秀!
你能分享這個元素在DOM級別(html代碼片段或頁面鏈接)上的外觀嗎? – drets
不幸的是,該網站不是現場的,我太新手了,從自動完成應用程序本身拉出相關的代碼。我正在尋找一個在野外的例子.. –