【问题标题】:Selenium tests are not able to interact with any of the elementsSelenium 测试不能与任何元素交互
【发布时间】:2019-03-18 01:05:21
【问题描述】:

所以我知道,当我将 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 直接访问下拉的选择标签。

【问题讨论】:

    标签: python django selenium selenium-webdriver


    【解决方案1】:

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

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

    即,

    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()
    

    【讨论】:

      猜你喜欢
      • 2022-07-01
      • 2022-01-07
      • 2020-03-25
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2017-10-03
      • 2020-03-08
      • 2021-12-16
      相关资源
      最近更新 更多