Django - 使用Selenium选择Autocomplete-Light选项

时间:2015-12-22 18:30:44

标签: python django selenium testing autocomplete

我一直试图弄清楚如何从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,无法从文件中推断出正确的选择器。

1 个答案:

答案 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,依此类推。优良!