【问题标题】:Selenium, Python- Clicking behind an elementSelenium,Python-单击元素后面
【发布时间】:2019-01-13 09:32:09
【问题描述】:

我正在尝试单击带有 selenium 的登录按钮(chrome 驱动程序,--headless)。 问题是登录按钮前面有一个元素。即使有元素挡路,有没有办法点击按钮?

我的 Python 脚本如下所示:

pirkciau_driver=webdriver.Chrome(crm_path, chrome_options=options)
pirkciau_driver.get(login_url)
elem = pirkciau_driver.find_element_by_id("email")
elem.clear()
elem.send_keys(x['pirkciau']['username'])
elem = pirkciau_driver.find_element_by_id("passwd")
elem.clear()
elem.send_keys(x['pirkciau']['password'])
elem = pirkciau_driver.find_element_by_id("SubmitLogin")
elem.click()

【问题讨论】:

  • “登录按钮前的元素”应该是什么意思?另一个元素是重叠的目标按钮?你有例外吗?
  • Selenium 旨在模拟用户行为。用户如何单击被另一个元素遮挡的元素?为什么需要单击该元素,真实用户在手动操作时如何处理这种情况?

标签: python selenium-webdriver


【解决方案1】:

尝试使用JavaScript Click,如下:

pirkciau_driver=webdriver.Chrome(crm_path, chrome_options=options)
pirkciau_driver.get(login_url)
elem = pirkciau_driver.find_element_by_id("email")
elem.clear()
elem.send_keys(x['pirkciau']['username'])
elem = pirkciau_driver.find_element_by_id("passwd")
elem.clear()
elem.send_keys(x['pirkciau']['password'])
elem = pirkciau_driver.find_element_by_id("SubmitLogin")
driver.execute_script("arguments[0].click();", elem);

【讨论】:

  • 请注意,通过使用 JS 点击一个被另一个元素遮挡的元素,您并不是在测试真实的用户场景。没有用户可以单击另一个元素下的元素。最佳做法是在单击所需元素之前关闭或以其他方式移除阻塞元素。如果有东西挡住了,用户将如何关闭覆盖元素?
【解决方案2】:

有几种方法可以做到这一点:

  • 执行 JavaScript:
    Running javascript in Selenium using Python
  • 也许您可以使用键盘登录(发送回车键)? elem.send_keys(Keys.RETURN)
  • 尝试单击其他元素,以便移除模态框并单击您需要的按钮。

【讨论】:

    【解决方案3】:

    你可以使用

    pirkciau_driver.execute_script('arguments[0].click()', elem)
    

    单击当前被另一个元素重叠的按钮,但它不会模拟真实的用户行为...如果您正在测试某些东西,最好等到接收点击而不是登录按钮的元素变得不可见ExplicitWaituntil_not(EC.visibility_of_element_located())until(EC.invisibility_of_element_located())

    【讨论】:

    • 很高兴学习新事物until_not。这是@sir Andersson 新发布的方法吗?。
    • 没有。这是一种古老的方法。我很确定我在 2-3 年前就已经使用过它了……
    • 目前唯一的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2021-12-09
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多