使用 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 警报的解决方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章