【问题标题】:How interact with dcc.DatePickerSingle using selenium如何使用 selenium 与 dcc.DatePickerSingle 交互
【发布时间】:2021-05-27 10:38:10
【问题描述】:

我正在测试一个用 dash 创建的仪表板,我有几个 dcc.DatePickerSingle。我想通过引入一些日期来测试这些,然后还测试仪表板生成的结果是否等于预期值。

我显示我正在使用的代码

import pytest
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys

import pytest
from selenium import webdriver
import sys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep


URL = 'http://127.0.0.1:8001/'
@pytest.fixture
def browser():
  # Initialize ChromeDriver
  driver = Chrome("./chromedriver")
  # Wait implicitly for elements to be ready before attempting interactions
  driver.implicitly_wait(10)
  
  # Return the driver object at the end of setup
  yield driver
  
  # For cleanup, quit the driver
  driver.quit()

def test_dates(browser):
  browser.get(URL)
  data_start ="Hola"
  search_input1 = browser.find_element_by_id('my-date-picker-start')
  search_input1.send_keys(data_start)

多次参加后我得到的错误是

ElementNotInteractableException

运行这个命令是pipenv run python -m pytest

这个元素是不可迭代的(我这样做了)还是我做错了什么(很可能)?

【问题讨论】:

    标签: python selenium testing plotly-dash


    【解决方案1】:

    您应该使用显式等待而不是隐式等待。
    所以,删除driver.implicitly_wait(10)(在你清楚地理解隐式等待的工作原理之前,永远不要使用它)并试试这个:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    search_input1 = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.ID, "my-date-picker-start")))
    
    search_input1.send_keys(data_start)
    

    【讨论】:

    • 感谢您的帮助。如果我删除 driver.implicitly_wait(10) 所有测试都失败了。其次,您的代码报告了错误“驱动程序”未定义。我试过browser (driver, 20)...,但发现同样的错误。
    • 当然,您仍然需要像以前一样定义驱动程序。我要求删除的唯一代码行是 driver.implicitly_wait(10) 因为隐式等待不能与显式等待一起正常工作。前 3 个导入应该在类的顶部,您已经有其他导入。
    • 我将在谷歌文档中向您展示完整的代码,您可以编辑docs.google.com/document/d/…
    • 我看到了,谢谢,但我不想编辑您的代码。这是你的工作。为了最简单的验证我的建议是否正确,您可以在 search_input1 = browser.find_element_by_id('my-date-picker-start') 之前添加一个简单的 sleep(5)。如果现在效果更好,请告诉我
    • 非常感谢,使用 search_input1 = browser.find_element_by_id('my-date-picker-start') 测试通过但我不知道是与元素交互
    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多