我在我的程序中点击浏览器中的按钮并在该页面内,应该出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作以单击下一个按钮。我目前收到此错误:
ElementNotVisibleException:消息:元素不可见
因此,我假设我在该按钮出现之前调用动作点击下一个按钮。我的问题是如何让我的程序等到我可以点击按钮,点击按钮?
driver.find_element_by_xpath('//*[@id="add-remove-buttons"]/input').click()
driver.find_element_by_xpath('//*[@id="cart"]/a[2]').click()
这是代码在程序底部的样子。我需要等到第二个动作可以完成第二个动作。谢谢你的帮助!
答案 0 :(得分:0)
您正在寻找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
。您可以使用<html>
<script>
function addItem() {
setInterval(() => {
var ul = document.getElementById('mylist');
var newItem = document.createElement('li')
newItem.innerHTML = 'hello0.0'
ul.insertBefore(newItem, ul.childNodes[0]);
}, 1000);
}
</script>
<body>
<button onclick='addItem()'> </button>
<ul id='mylist'>
<li id="insertPoint"> hello1 </li>
<li> hello2 </li>
</ul>
</body>
</html>
进行调试。
答案 1 :(得分:0)
As per your Question, we are trying to invoke click()
method on both the buttons so we will induce ExplicitWait
i.e. WebDriverWait
with expected_conditions
as element_to_be_clickable
as follows :
firstButton = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(By.XPATH,"//*[@id='add-remove-buttons']/input"))
firstButton.click()
secondButton = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(By.XPATH,"//*[@id='cart']/a[2]"))
secondButton.click()