【发布时间】:2016-05-27 09:09:22
【问题描述】:
我面临以下问题:有一个页面(不幸的是它不是公开的)带有一个 Register request 和一个 Approve request 按钮。单击一个按钮会打开一个透明的div 并弹出一个窗口。
算法如下:
1) 点击Register;
2)在弹出的弹出窗口中填写表格;
3)点击Submit确认注册(关闭弹窗);
4) 点击Approve
所以我使用以下代码:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[@id="RegisterButton"]'))).click()
# ...Filling Register form...
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[@id="SubmitButton"]'))).click()
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//button[@id="ApproveButton"]'))).click()
但尽管使用了EC.element_to_be_clickable(),但我收到以下错误:
WebDriverException: Message: unknown error:
Element is not clickable at point (338, 167).
Other element would receive the click: <div class="modal fade" id="confirmWindow" style="display: block;">...</div>
似乎驱动程序认为Approve 已经可以点击并尝试在透明的div 仍然显示时点击它。
所以我需要一个Expected Conditions 语句来捕获div 已被选中时的状态,如果按钮可点击则Approve
附:我正在使用time.sleep() 来执行此操作,但似乎是一种粗略的方法
更新
我尝试使用JavaScript:
driver.execute_script('document.getElementById("ApproveButton").click();')
到目前为止它有效......我想知道它是否真的是一个更好的点击按钮的方式,或者也可能存在一些障碍?
【问题讨论】:
-
嗨@andersson,您的代码工作正常,因为您收到“元素在点 (338, 167) 处不可点击”的错误得到确认,而且 Thread.sleep 工作正常,因为您已为其应用 EC 的元素存在于 DOM 中,但它在 DOM 中没有固定位置,此错误通常发生在 Google Chrome 浏览器中,我敢打赌您使用的是 chrome
-
要解决这个问题,请查看此链接stackoverflow.com/questions/37388866/…
-
是的,我使用
Chromedriver。谢谢你的链接,我去看看 -
是的,一个快速的解决方案是简单地更改浏览器,它肯定会工作,谢谢
-
@RemcoW,超时增加无效
标签: python selenium selenium-webdriver selenium-chromedriver