我一直试图弄清楚如何从autocomplete-light为我的测试创建的下拉列表中选择一个选项。
回复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 :(得分:0)
我放弃了这三次,然后才最终解决这个问题。
Selenium需要等待名为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。该类在我正在使用的版本的第245行的autocomplete.js
中定义:
this.hilightClass = 'hilight';
highlight
的类,从而使webdriver混乱。所以我不得不使用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
,依此类推。优良!