使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?

Posted

技术标签:

【中文标题】使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?【英文标题】:What would be a walkaround for JavaScript alerts that are generated in a page's onload() using Selenium?使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是什么? 【发布时间】:2011-05-11 18:32:44 【问题描述】:

我正在使用 Selenium RC (C#) 自动化表单页面。单击“提交”按钮后,我收到警报“Records Edited Successfully!”。此警告框的标题是“The page at @987654321@.******.com says:”。

但是 Selenium 没有看到这个警报。我无法解决它。

这是我尝试过的:

selenium.Click("ctl00_Content_ctl00_btnSubmit");
selenium.WaitForPageToLoad("30000");

结果:我收到以下错误:“Selenium.SeleniumException : Timed out after 30000ms

然后我尝试了:

selenium.Click("ctl00_Content_ctl00_btnSubmit");
selenium.OpenWindow("", "The page at The page at http://www.******.com says:");
selenium.Close();
selenium.WaitForPageToLoad("30000");

结果:打开了三个窗口(站点、警报和额外窗口)。什么都没有关闭。我收到以下错误:“Selenium.SeleniumException : Timed out after 30000ms

然后我尝试了:

selenium.Click("ctl00_Content_ctl00_btnSubmit");
selenium.SelectWindow("The page at The page at http://www.******.com says:");
selenium.Close();
selenium.WaitForPageToLoad("30000");

结果:我收到以下错误:“Could not find window with title 'The page at @987654322@.******.com says:'

有什么建议吗?请帮助克服这个障碍。

【问题讨论】:

【参考方案1】:

终于找到了解决办法:

    selenium.Click("ctl00_Content_ctl00_btnSubmit");                        
    Thread.Sleep(5000);
    selenium.KeyDownNative("32");
    selenium.KeyUpNative("32");

祝大家一切顺利!

【讨论】:

【参考方案2】:

显然,最简单的方法是使用脚本将 alert() 函数重新定义为不弹出对话框的内容。

((javascriptExecutor) fDriver).executeScript(
  "window.alert = function(msg)  return true; "
); 

【讨论】:

在我的情况下过于极端的解决方案。我不想(也没有权限)更改网站的代码。 我绝不是建议您更改网站...我建议在您的 Selenium 脚本中,当您仅在运行 自动测试,以覆盖 alert() 函数以仅返回 true。 (您可以对确认等进行相同操作) - 由于不需要/不希望用户交互,因此您不会造成任何问题,当然也不会更改 实际 代码库。 嗯很有趣....我如何“注入花絮”?我是否在我的 C# [Test] 方法中输入它?你能给出一步一步的指示吗?谢谢。

以上是关于使用 Selenium 在页面的 onload() 中生成的 JavaScript 警报的解决方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

页面OnLoad事件绑定

页面OnLoad事件绑定

被引用的外部JS存在window.onload时,判断当前页面是否已存在window.onload,并进行相应处理

页面window.onload冲突

页面window.onload冲突

在html中使用window.onload和onload的区别