运行selenium测试时处理javaScript警报?

时间:2010-05-25 14:37:11

标签: javascript ruby selenium

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

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

如何在制作并关闭弹出窗口时处理此警报?

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

任何想法?

感谢

2 个答案:

答案 0 :(得分:2)

documentation没什么帮助,但是Selenium RC的Java Docs似乎表明getAlert()确实存在here。此外,this网站也列出了这些功能:

  

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

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

... AlertPresent()和... AlertNotPresent()函数检查是否存在警报 - 无论其内容如何。 ...(Alert()函数允许调用者指定应匹配的模式。 getAlert()方法也存在于Selenium RC中,并返回显示的上一个Alert中的文本。确认

也可以使用类似的功能

答案 1 :(得分:0)

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());