当前位置: 首页 > 面试题库 >

我如何从人类发出警报的页面中恢复“文本”,特别是在人类用户点击页面的“警报” **后,**

伊裕
2023-03-14
问题内容

基本上,当在javascript中弹出警报时,我可以dismiss()通过调用来从python完全确定selenium.webdriver.common.alert.Alert(browser).dismiss()

但是,如果“浏览器用户”[OK]使用鼠标单击(在屏幕上)以关闭警报,则浏览器警报将显示“空间丢失”,body.text因此无法再从python访问。

所以…如何在人类用户 单击 页面 警报* 上的[dismiss] ,从发出警报的页面中恢复“文本” ? __ *

以下是提示和演示此问题的脚本…

供参考:始发码的目标是它允许 浏览器用户 干预 在屏幕上 在测试和手动响应特定警报。

#!/usr/bin/env python
import os,sys,time
import selenium.webdriver
import selenium.webdriver.support.expected_conditions

print dict(python=sys.version,selenium=selenium.__version__)

path=os.path.join(os.getcwd(),"hello_worlds.html")
url="file:///"+path

open(path,"w").write("""<HTML>
  <HEAD><TITLE>Head Title</TITLE></HEAD>
  <BODY><H1>Hello, worlds!</H1></BODY>
</HTML> """)

browser=selenium.webdriver.Firefox()
browser.get(url)

body=browser.find_element_by_tag_name("body")
print "BODY:",body.text

try:

  for enum,world in enumerate("Mercury Venus Earth Mars Asteroids Jupiter Saturn Uranus Neptune".split()):

    if "Earth" in world: world+=": So do MANUALLY dismiss! {Click [OK] now!!!}"
    else: world+=": AUTO PILOT... please DONT dismiss! {done via selenium.dismiss()!}"

    browser.execute_script('alert("Hello, %s!")'%world)
    if selenium.webdriver.support.expected_conditions.alert_is_present():
      print selenium.webdriver.common.alert.Alert(browser).text

    time.sleep(enum+5)
    if "Earth" not in world: selenium.webdriver.common.alert.Alert(browser).dismiss()

    print "BODY:",body.text

finally:
  browser.quit()

输出:(地球崩溃)

{'python': '2.6.6 (r266:84292, Aug 18 2016, 15:13:37) \n[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)]', 'selenium': '2.53.2'}
BODY: Hello, worlds!
Hello, Mercury: AUTO PILOT... please DONT dismiss! {done via selenium.dismiss()!}!
BODY: Hello, worlds!
Hello, Venus: AUTO PILOT... please DONT dismiss! {done via selenium.dismiss()!}!
BODY: Hello, worlds!
Hello, Earth: So do MANUALLY dismiss! {Click [OK] now!!!}!
BODY:
Traceback (most recent call last):
  File "./js_alert.py", line 37, in <module>
    print "BODY:",body.text
...
selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: Hello, Earth: So do MANUALLY dismiss! {Click [OK] now!!!}!
Message: Unexpected modal dialog (text: Hello, Earth: So do MANUALLY dismiss! {Click [OK] now!!!}!) The alert disappeared before it could be closed.

奇怪的是,如果 浏览器用户 触发了另一个警报(甚至在 另一个
页面上!),那么aselenium.dismiss()就会body.text从边缘和硒中撤出,并且 从那时起 将按我的预期运行。

关于如何使浏览器恢复正常的任何建议page.body?(并逃脱警报)


问题答案:

很长时间以来,我一直在努力解决这个问题;您对问题的评论为我解决了问题:

后两者UnexpectedAlertPresentExceptionNoAlertPresentException抛出…

browser.execute_script('alert("Clearing out past dialogs.")')
browser.switch_to.alert.accept()

如您在回答中所说,当出现警报时,webdriver正在创建“对话框”。手动关闭警报会导致其参考信息陷入困境,但仍然阻止对的访问body.text。创建新的警报似乎可以使Webdriver清除旧的“对话”,并(在接受之后)再次授予对该页面的访问权限。



 类似资料:
  • 问题内容: 我是angularjs新蜜蜂。我正在尝试编写一个验证,当用户尝试关闭浏览器窗口时会发出警告。 我的页面v1和v2上有2个链接。单击链接时,它指向特定页面。这是重定向到v1和v2的代码 当用户单击v1时,我想弹出一条消息,“如果他希望继续,他将从v1离开”,而单击v2时也是如此。任何有关如何实现这一目标的指针将不胜感激。 我在这里得到了答案,但是在每个时间间隔后都会弹出该消息。 更新的代

  • 我想停止重新加载页面时,我没有选择类别和点击提交按钮。有人能帮我吗? null null

  • 本文向大家介绍如何通过单击iOS中的警报外部来关闭警报?,包括了如何通过单击iOS中的警报外部来关闭警报?的使用技巧和注意事项,需要的朋友参考一下 理解和实现UIAlert可能会很棘手,特别是如果您不熟悉iOS开发,在这篇文章中,我们将看到当用户在警报框外点击时如何解除警报。 对于此演示,我们将使用UIAlert类,以使用要显示的消息以及可供选择的操作来配置警报和操作表。用所需的动作和样式配置警报

  • 问题内容: 嗨,我正在开发警报应用程序,因为我需要在用户选择的不同日期的同一时间重复调用警报。 我meen如果我设置报警时间8PM和重复选项sunday,tuesday闹钟会在每个被调用sunday,tuesday。 任何帮助,将不胜感激。 问题答案: 为此使用广播接收器和Sqlite数据库。

  • 我试图在。ics文件中实现警报()。其思想是,每当在系统中创建指定的记录时,就会发送带有邀请的自动电子邮件。该事件工作正常,它正在发送,我能够添加到日历(谷歌日历和iPhone/Mac日历)。 所以问题是:是谷歌和苹果忽视了这些VALARM组件,还是我做错了什么? 我是否正确理解这个带有动作的警报应该只是在浏览器(谷歌日历)和日历应用程序中向我显示一个弹出窗口? 我的文件正文: null

  • 我每天上午11点使用显示通知。 当我在应用程序中设置警报时,警报会在短时间后触发。