【问题标题】:Django - Selecting Autocomplete-Light choices with SeleniumDjango - 使用 Selenium 选择 Autocomplete-Light 选项
【发布时间】:2016-03-29 02:20:05
【问题描述】:

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

【问题讨论】:

  • 你能分享一下这个元素在 DOM 级别(html sn-p 或页面链接)上的外观吗?
  • 不幸的是该网站没有上线,而且我太新手了,无法将相关代码从自动完成应用程序本身中提取出来。我正在野外寻找它的一个例子..

标签: python django selenium testing autocomplete


【解决方案1】:

我放弃了 3 次,才终于解决了这个问题。

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,以此类推。太棒了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多