当我试图单击位于弹出菜单后面的按钮时,我收到以下错误消息。
*** selenium.common.exceptions.ElementClickInterceptedException: Message: Element <input id="submitButton" class="search-button icon-search active" type="submit"> is not clickable at point (729.2000122070312,22) because another element <div id="monetate_lightbox_mask" class=""> obscures it
此错误消息能够识别阻止我单击的内容的名称
我如何获得这个名称(作为一个元素),以便进行修改,
element = <div id="monetate_lightbox_mask" class="">
browser.execute_script("""var element = arguments[0]; element.parentNode.removeChild(element);""", element)
等待功能不适用,因为此弹出窗口不会消失。我试过网络驱动程序。ActionChains,但它不能解决这个问题
如果我理解正确,你基本上不想硬编码monetate_lightbox_mask
id并将其解析为异常消息。可以采用如下方法:
import re
from selenium.common.exceptions import ElementClickInterceptedException
error_pattern = re.compile(r'another element <div id="(.*?)".*? obscures it')
submit_button = driver.find_element_by_id("submitButton")
try:
submit_button.click()
except ElementClickInterceptedException as e:
print("Blocking element detected. Removing..")
blocking_element_id = error_pattern.search(e).group(0) # TODO: error handling
blocking_element = driver.find_element_by_id(blocking_element_id)
browser.execute_script('var element = arguments[0]; element.parentNode.removeChild(element);', blocking_element)
print("Element removed. Clicking again...")
submit_button.click()
在这里,我们将正则表达式模式应用于错误消息以提取id
值,该值引入了该阻塞元素具有id的假设。我们可以改进它以查找所有属性,然后使用这些属性来定位阻塞元素。
我们甚至可以使用类似BeautifulSoup
HTML解析器来解析错误消息并在其中查找HTML元素,而不是使用正则表达式:
In [1]: from bs4 import BeautifulSoup
In [2]: data = """
...: *** selenium.common.exceptions.ElementClickInterceptedException: Message: Element <input id="submitButton" cla
...: ss="search-button icon-search active" type="submit"> is not clickable at point (729.2000122070312,22) because
...: another element <div id="monetate_lightbox_mask" class=""> obscures it
...: """
In [3]: soup = BeautifulSoup(data, "html.parser")
In [4]: for element in soup():
...: print(element)
...:
<input class="search-button icon-search active" id="submitButton" type="submit"/>
<div class="" id="monetate_lightbox_mask"> obscures it
</div>
In [5]: blocking_element = soup()[-1]
In [6]: blocking_element.name
Out[6]: 'div'
In [7]: blocking_element.attrs
Out[7]: {'class': [''], 'id': 'monetate_lightbox_mask'}
另一个注意事项:如果有多个阻塞弹出窗口,则可能需要递归应用此方法。
另一个有趣的解决方法是通过javascript执行单击-在这种情况下,它前面的内容或阻止它都无关紧要:
submit_button = driver.find_element_by_id("submitButton")
driver.execute_script("arguments[0].click();", submit_button)
此外,请注意常规selenium点击和通过javascript点击之间的区别:
我有这段代码显示了一个按钮谁显示一个弹出窗口,我希望用户能够关闭弹出窗口点击它的外部时,它是打开的。
我在我的网站上有一个按钮,允许用户通过Yodlee/Plaid使用弹出的登录屏幕登录到他们的银行。问题是弹出窗口被safari和chrome手机屏蔽了。弹出窗口在桌面上工作。我读到过safari和chrome会阻止所有弹出窗口,如果用户没有点击按钮启动弹出窗口,或者弹出窗口从点击事件开始超过一秒。 我的问题是,在启动弹出窗口之前,我的前端必须调用我的后端来检索令牌。所有这些都需要超过一秒钟的时间,
我在我的项目中为10个产品创建了剑道网格。当我点击剑道网格中显示的productname时,我希望弹出包含产品详细信息的剑道窗口。 我已经查看了剑道网格的演示,但我不想编辑所选产品的详细信息,也不想使用示例和演示中所示的“详细信息”按钮的单独列。 我还查看了剑道ui的音乐商店演示,但我无法理解它的代码,因为它在jQuery中,我正在使用asp。net mvc与我的项目的razor语法 注意:我希望
问题内容: 我知道可以检测其他浏览器是否阻止了弹出窗口的javascript技术。这是基本测试: 但这在Chrome中不起作用。阻止弹出窗口时,永远不会到达“弹出窗口被阻止”部分。 当然,该测试在一定程度上是可行的,因为Chrome实际上并没有阻止弹出窗口,而是在右下角的最小化最小窗口中打开了该窗口,其中列出了“阻止的”弹出窗口。 我想做的就是能够确定弹出窗口是否被Chrome的弹出窗口阻止程序阻
O/S:BrowserStack Live 浏览器:IE11 **编辑:2017年3月7日** 此错误仅发生在以下情况:进行付款,导航到另一个页面,然后尝试另一个付款。
本文向大家介绍java实现点击按钮事件弹出子窗口,包括了java实现点击按钮事件弹出子窗口的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现点击按钮事件弹出子窗口的具体代码,供大家参考,具体内容如下 要求: 1、在父窗口中添加一个按钮 2、点击按钮弹出子窗口 注意:这是JDK1.7版本 在JDK1.7之前,JFrame是不能直接添加子窗口的,要先将JInternalFram