我正在使用selenium webDriver编写一个Web应用程序的测试,并遇到了一个场景,当我尝试关闭浏览器时,出现一个弹出窗口,显示“您确定吗?页面要求您确认你想离开 - 输入的数据将会丢失。“带2个按钮:离开页面并保持在页面上Selenium WebDriver如何关闭浏览器弹出框
如何点击这些按钮?
我正在使用selenium webDriver编写一个Web应用程序的测试,并遇到了一个场景,当我尝试关闭浏览器时,出现一个弹出窗口,显示“您确定吗?页面要求您确认你想离开 - 输入的数据将会丢失。“带2个按钮:离开页面并保持在页面上Selenium WebDriver如何关闭浏览器弹出框
如何点击这些按钮?
((JavascriptExecutor) _driver)
.executeScript("window.onbeforeunload = function(e){};");
解决这个问题对我来说
把其中的一个单击事件之前:
selenium.chooseCancelOnNextConfirmation()
selenium.chooseOkOnNextConfirmation()
对于硒RC而不是webdriver的 – Maalamaal
@ ethan.thomason作品:我觉得海报希望对webdriver的答案,而不是硒RC。所以,你的答案并不准确 –
不知道那是什么,你已经使用了弹出式的结构。 这里有几个可能适用于你的情况,如果你已经使用了其中一种弹出功能。
如果其警报。你可以尝试:
driver.SwitchTo().Alert()
如果其弹出,然后从窗户
driver.SwitchTo().Window(<windowname>)
iframe的:
driver.SwitchTo().Frame("iFrmLinks")
一旦你通过任何三个拿到那么你就可以访问所有其内部元素。
问候 塔希尔
如何从Alert/Window/Frame返回到原始窗口? –
鉴于OP提供的文本,弹出窗口可能是一个警报。 – oneloop
您可以尝试使用键盘事件。所以一旦弹出窗口:
选项卡上的“确定”按钮。
driver.Keyboard.PressKey(Keys.Tab);
你将不得不四处看看需要多少标签页。
然后命中空间。
driver.Keyboard.PressKey(Keys.Space);
是的这是一种黑客,但WebDriver仍然相当不成熟。
编辑:这将适用于“真正的”弹出窗口,但正如另一个回答者所说,也许不适用于怪异的页面内容。基本上,如果你可以手动选择关闭按钮,这个方法应该可以工作。
IAlert alert = driver.SwitchTo().Alert();
alert.Accept(); //for two buttons, choose the affirmative one
// or
alert.Dismiss(); //to cancel the affirmative decision, i.e., pop up will be dismissed and no action will take place
在Chrome中无法使用。 –
您可以通过警报互动和喜欢用Alert API。切换到警报并确认它看起来像这样(在Java中):
Alert alert = driver.switchTo().alert();
alert.accept();
这在Selenium FAQ还解释。
def close_all_popups(driver):
driver.window_handles
for h in driver.window_handles[1:]:
driver.switch_to_window(h)
driver.close()
driver.switch_to_window(driver.window_handles[0])
这是为了关闭弹出浏览器窗口,而不是解雇JavaScript警报?因为它不适用于后者...... – hwjp
我有同样的问题,当我有字段的形式和“编辑完成”提交按钮,因为当硒IDE自动点击的JavaScript功能,即负责禁用确认窗口(离开页面或仍然在上面),它不需要“mouseup”鼠标事件,这意味着window.confirm仍然有效,并且自动通过测试失败。我的解决方案是覆盖JavaScript函数window.onbeforeunload在这种情况下(不需要问我们是否知道我们在Selenium IDE中记录测试时所做的)。您可以在Selnium IDE中运行覆盖脚本,然后点击“Save”(或类似的东西)按钮,直到selenium.runScript - 它应该简单地禁用确认窗口。
Command: runScript
Target: {window.onbeforeunload=function(e){};}
您需要使用try catch块来处理意外的警报。将代码放在try块,赶上“UnhandledAlertException”
例子:
try{
.....
.....
code here
}catch(UnhandledAlertException e){
driver.switchto().alert().dismiss();
}
你知道轨道上的红宝石解决方案吗? – beornborn
谢谢!为我工作! – Darxis
这只是删除弹出式绑定,它不会单击按钮。 – James