python - 等到 Selenium WebDriver 中单击按钮才能单击下一个按钮?

标签 python selenium xpath selenium-webdriver

我在我的程序中将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。该按钮出现后,我的程序将立即运行下一步操作以单击下一步按钮。我当前收到此错误:

ElementNotVisibleException: Message: element not visible

因此,我假设我正在调用该操作以在该按钮出现之前单击下一个按钮。我的问题是我该怎么做才能让我的程序等到我可以单击按钮时单击按钮?

driver.find_element_by_xpath('//*[@id="add-remove-buttons"]/input').click()
driver.find_element_by_xpath('//*[@id="cart"]/a[2]').click()

这就是我的程序底部的代码。我需要能够等到第二个操作可以完成第二个操作。感谢您的帮助!

最佳答案

您正在寻找 Selenium Waits 。本质上,您想要单击一个按钮并等待另一个按钮出现,然后单击该按钮。类似的问题在这里得到了回答:Selenium waitForElement

你可以这样做(未经测试的代码):

import contextlib
import selenium.webdriver as webdriver
import selenium.webdriver.support.ui as ui

with contextlib.closing(webdriver.Firefox()) as driver:
    driver.get('http://example.com')
    wait = ui.WebDriverWait(driver,10)

    driver.find_element_by_xpath('//*[@id="add-remove-buttons"]/input').click()

    # Wait until the element appears
    wait.until(lambda driver: driver.find_element_by_xpath('//*[@id="cart"]/a[2]'))
    driver.find_element_by_xpath('//*[@id="cart"]/a[2]').click()

您可能需要尝试一下这个。我发现每当我使用 wait 时,都需要一段时间才能正确。您可以使用driver.save_screenshot进行调试。

关于python - 等到 Selenium WebDriver 中单击按钮才能单击下一个按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47251939/

相关文章:

python-3.x - "Eager"Python 中 Chromedriver Selenium 的页面加载策略解决方法

xml - xslt确定元素的数量和位置

xpath - 如何从Xpath查询中排除元素?

javascript - 如何使用一个 get 方法克隆标签对象?

python - 来自 scipy.stats.rv_continuous 的自定义 PDF 不需要的上限

python - 按创建/修改日期移动文件然后使用 Python 移动

python - 如何在 setup.py python 脚本中编译 *.po gettext 翻译

python - 使用 Scrapy 抓取大量站点

java - 是否有可用的 Selenium 特定测试框架?

selenium - 无法导入方法,即使将外部 jar 文件添加到项目中也是如此