【问题标题】:handling javaScript alerts when running a selenium test?运行硒测试时处理javascript警报?
【发布时间】:2011-02-23 17:46:53
【问题描述】:

我正在我的网页上运行一些硒测试(ruby),当我在文本框中输入无效字符时,我让 JavaScript 像这样抛出警报

if(isNaN($(this).val()) || Number($(this).val().valueOf() <=0)){
    alert("Please Enter A Number");
}

当它发出并关闭弹出窗口时,我如何处理这个警报?

我尝试使用wait_for_pop_up()close(),但我认为这仅适用于浏览器弹出窗口,而不适用于 JavaScript 警报。

有什么想法吗?

谢谢

【问题讨论】:

    标签: javascript ruby selenium


    【解决方案1】:

    documentation 没有多大帮助,但 Selenium RC 的 Java 文档似乎表明 getAlert() 确实存在herethis 网站也列出了这些功能:

    使用 Selenium 进行处理 Selenium 中提供了以下用于处理警报的命令:

    • getAlert()
    • assertAlert() assertAlertNotPresent()
    • assertAlertPresent() storeAlert()
    • storeAlertPresent() verifyAlert()
    • verifyAlertNotPresent()
    • verifyAlertPresent() waitForAlert()
    • waitForAlertNotPresent()
    • waitForAlertPresent()

    …AlertPresent() 和…AlertNotPresent() 函数检查警报是否存在——不管它的内容。 …Alert() 函数允许调用者指定应该匹配的模式。 getAlert() 方法也存在于 Selenium RC 中,并返回先前显示的 Alert 中的文本。类似的功能也可用于确认

    【讨论】:

    • 请注意,有一个已知的 selenium 问题,它无法处理 onLoad 事件期间生成的警报,只会挂起。我们通过让我们的测试代码在另一个线程中执行 [AutoIt][1] 来解决这个问题。 [1]:autoitscript.com/autoit3/index.shtml
    【解决方案2】:

    Selenium 拦截所有 JavaScript alert() 调用(以及 confirm() 和 prompt())并自行处理它们。你可以告诉它你想让它做什么,你可以找出发生了什么(除了在 onLoad 期间,正如 Zugwalt 所说)。您可以调用 isAlertPresent() 来检查是否生成了警报,并调用 getAlert() 来检索它的文本。 Selenium 甚至会为您将它们排队,以防万一有多个(它们按顺序检索)。如果生成警报并且您没有调用 getAlert() 来检索它,则下一个 Selenium 操作将引发异常。如果你在没有的时候调用它,你会得到一个异常。

    例如(未经测试,在 C# 中,但你应该明白这一点):

    selenium.GetEval("window.alert('Hi, mom!'); window.alert('Bye, dad!')");
    Assert.AreEqual("Hi, mom!", selenium.GetAlert());
    Assert.AreEqual("Bye, dad!", selenium.GetAlert());
    Assert.IsFalse(selenium.isAlertPresent());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-13
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2014-08-24
      • 2013-06-30
      相关资源
      最近更新 更多