当前位置: 首页 > 知识库问答 >
问题:

使用selenium和python检查是否存在任何警报

颛孙建业
2023-03-14

我正在尝试用python语言为管理用户的网页编写一个硒测试。在此页面中,有人可以为用户添加角色,如果添加时存在角色,则会引发警报。我不知道警报是javascript警报还是网页的一个元素。我想自动检查警报的存在,因为检查列表中的角色会浪费时间,而且负载很大。我试过这个:

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
try:
    alert = browser.switch_to_alert()
    alert.accept()
    print "alert accepted"
except:
    print "no alert"

但是它不起作用,我得到了“意外警报”。我也试过这个:

browser = webdriver.Firefox()
browser.get("url")
browser.find_the_element_by_id("add_button").click()
s = set(browser.window_handles)
s.remove(browser.current_window_handle)
browser.switch_to_window(s.pop()) 

但我也有同样的例外。此外,我尝试使用firebug访问警报,以检查是否可以访问其属性,但右键单击被禁用。我需要一个非常快速的解决方案,即使是其他语言。无论如何,我能理解这种方法。我将感谢任何帮助。

共有3个答案

穆展鹏
2023-03-14

java我们这样做

WebDriverWait wait3 = new WebDriverWait(driver, 7000);
wait3.until(ExpectedConditions.alertIsPresent());
driver.switchTo().alert().accept();

它将隐含地等待警报,如果警报不存在,它将抛出警报不存在异常,我们可以抓住并向前移动。

希望能有帮助。

徐皓君
2023-03-14

我知道这是一个太晚的答案,你在几年前就解决了这个问题,但我仍然想发表我的分析和发现,供未来可能的读者参考。

我正在做一个Django网站开发项目,目前有一个bug,一旦打开一个特定的网页,就会弹出一个错误消息框。我的环境是:

  • Django 1.8
  • Python 2.7
  • 硒2.46.0

我在这里阅读了关于“意外警报异常”的文档,它说:

出现意外警报时引发。

通常当预期的模态阻止WebDrive表单执行任何更多命令时会引发。

我在我的项目中进行了测试,结果如下:

  • 当警报框打开时,find\u element\u by\u X方法可以成功
  • click()或send_keys()将失败,出现“UnexpectedAlertPresentException”

因此,我认为<代码>尝试。。。catch块不起作用,因为在

browser.find_the_element_by_id("add_button").click()

这也意味着,通过此行打开网页时,警报框可能会立即出现:

browser.get("url")

换句话说,可能有一个问题隐藏在后面,导致警报框在页面打开后立即出现。你可能需要先解决这个问题。

另一件事是:假设警报框出现在这一行之后:

browser.find_the_element_by_id("add_button").click()

然后警报=browser.switch_to_alert()应该工作良好,没有引发异常,这与您在这里描述的相矛盾。这也让我想到问题早在browser.get("url")行。

我不太确定选择的解决方案是如何帮助您解决问题的,因为我的分析显示问题位于不同的位置。无论如何,我不是要求重新选择被接受的解决方案。我只想和未来的读者分享我的想法。如果我忽略或误解了这个问题中的某些东西,导致我的分析错误(并且浪费了您的时间阅读此:-),请道歉。

束阳旭
2023-03-14

我所做的是设置一个有条件的延迟与WebDriver等待之前的点,我希望看到警报,然后切换到它,像这样:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

browser = webdriver.Firefox()
browser.get("url")
browser.find_element_by_id("add_button").click()

try:
    WebDriverWait(browser, 3).until(EC.alert_is_present(),
                                   'Timed out waiting for PA creation ' +
                                   'confirmation popup to appear.')

    alert = browser.switch_to.alert
    alert.accept()
    print("alert accepted")
except TimeoutException:
    print("no alert")

WebDriverWait(浏览器,3将等待至少3秒钟,以显示支持的警报。

 类似资料:
  • 问题内容: 我正在尝试使用python语言的selenium为管理用户的网页编写测试。有人可以在此页面中为用户添加角色,如果在添加角色时存在该角色,则会发出警报。我不知道警报是JavaScript警报还是网页元素。我想自动检查警报的存在,因为检查列表中的角色既浪费时间又负担很大。我尝试了这个: 但这没有用,我收到了“ UnexpectedAlertPresentException”。我也尝试过这个

  • 问题内容: 我有一个问题-我正在使用Selenium(firefox)Web驱动程序打开网页,单击一些链接等,然后捕获屏幕截图。 我的脚本可以从CLI正常运行,但是通过cronjob运行时,它并没有通过第一个find_element()测试。我需要添加一些调试,或一些帮助我弄清为什么失败的东西。 基本上,我必须先单击“登录”锚点,然后才能进入登录页面。元素的构造为: 我正在通过LINK_TEXT方

  • 问题内容: 我正在尝试通过查找元素 在Python中,selenium并不总是存在。是否有一条快速的线检查它是否存在,并在不存在时显示NULL或FALSE代替错误消息? 问题答案: 您可以按以下方式实现/ 阻止以检查元素是否存在: 或使用其中一种方法进行检查。它应该返回空列表或与传递的选择器匹配的元素列表,但如果没有找到元素,也不例外:

  • 问题内容: 我的游标带有查询语句,如下所示: 我想检查组件的存在:名称并返回python变量。我怎么做? 问题答案: 由于s是唯一的,因此与我最初使用的建议相比,我真的更喜欢您(OP的)使用方法或Alex Martelli的使用方法。 将结果(通常是多行数据)包装在一个列表中。由于s是唯一的,因此返回列表中只有一个元组的列表(例如,或为空列表。如果您想知道,则使用要求您浏览列表和元组以到达。 在这

  • 问题内容: 我想检查Selenium中是否存在一个元素,如果存在,请将其分配给一个名称。 现在,我有这样的东西: 但是,当不存在值为9的元素时,它将返回错误。有没有一种方法可以检查它是否存在,或者类似的东西? 问题答案: 有几种选择。我推荐这些。 1.创建方法或Web驱动程序扩展。 2.计算元素,如果有1个或更多元素,则获取它。 那你可以检查

  • 问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性: