首页 > 解决方案 > Selenium 测试不能与任何元素交互

问题描述

所以我知道,当我将 Django 设置中的 DEBUG 设置为 False 时,Selenium 无法访问静态文件,结果如下所示:

这个

但是,当我运行我的 Selenium 测试时,不管它们是否能够与 DOM 交互并从下拉列表中选择项目!我目前的测试代码是

from selenium.webdriver import Chrome
from selenium.webdriver.support.ui import Select
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from urllib.parse import urljoin
import time

driver = webdriver.Chrome()
driver.get("localhost:8000/")

time.sleep(3)
driver.find_element_by_id('select-dance').click()
select = Select(driver.find_element_by_xpath('//*[@id="select-dance"]'))
select.select_by_value('1')

driver.find_element_by_id('select-date-range').click()
select = Select(driver.find_element_by_xpath('//*[@id="select-date-range"]')) 
select.select_by_value('1')

driver.find_element_by_id('location').click()

当我将 DEBUG 设置为 True 时,页面会呈现我想要的样子,因为它可以访问静态文件。但是每当我尝试运行测试时,我总是会收到错误

selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable

所有静态文件都工作的搜索栏是什么样的

这似乎发生在我提到的任何元素上。出于某种原因,当我尝试直接单击下拉列表时,它总是突出显示此输入,并且选择标签似乎总是“隐藏”,所以我想知道这是否可能导致错误 看这里

谢谢大家的帮助,我不知道为什么不允许 Selenium 直接访问下拉选择标签。

标签: pythondjangoseleniumselenium-webdriver

解决方案


您的页面使用自定义选择组件,它不是默认的html 选择框。在您的情况下,他们使用了无法使用 selenium类进行交互的MDBootstrap Select ComponentSelect

你说的对。您正在尝试与不可见的<select>dom 交互,并且它正在抛出元素不可见异常。我们有两个自动化这个案例,就像手动步骤一样,

IE,

  1. 单击难以处理的元素。
  2. 等待下拉菜单出现。
  3. 单击下拉列表中的值。

在您在舞蹈选择框中选择第一个值的情况下,代码可以重写如下。

# this is click the input element which is intractable
# Here the input box which contains value 'dance event' is clicked

driver.find_element_by_css_selector('input.select-dropdown[value*="dance event"]').click  

# Then we are waiting for the first value of the dropdown which is not disabled

wait = WebDriverWait(driver, 60)
element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'input.select-dropdown[value*="dance event"]+ul>li:not(.disabled)')))

# Click the element first value of the dropdown

element.click()

推荐阅读