python - 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 直接访问下拉选择标签。
解决方案
您的页面使用自定义选择组件,它不是默认的html 选择框。在您的情况下,他们使用了无法使用 selenium类进行交互的MDBootstrap Select ComponentSelect
你说的对。您正在尝试与不可见的<select>
dom 交互,并且它正在抛出元素不可见异常。我们有两个自动化这个案例,就像手动步骤一样,
IE,
- 单击难以处理的元素。
- 等待下拉菜单出现。
- 单击下拉列表中的值。
在您在舞蹈选择框中选择第一个值的情况下,代码可以重写如下。
# 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()
推荐阅读
- python - 从多索引熊猫数据框中选择索引和列的子集
- r - R中从XML到Dataframe的气象数据
- javascript - 性能 - 功能组件内部的功能
- javascript - 如何使用从 SQL 数据库请求的相同数据创建链接?
- android - 将多个事件插入日历非常慢。我可以加快速度吗?
- python - 如何用另一个字典中的键替换字典中的键?
- batch-file - 批量条件连接
- sql - 在 Netezza 中删除字符串中的一组字符
- java - 线程“main”中的异常 java.lang.NumberFormatException:null 接受整数
- reactjs - React:以编程方式创建元素/标签/从字符串创建 React 元素?