我遇到某些网站的问题,导致我的浏览器在尝试切换到其他网址时出现提示,甚至关闭浏览器。一些例子:
为了使用Selenium解决警报问题,我需要切换到该警报,然后有时接受它并有时拒绝它(取决于警报的内容)。
我希望避免以这种方式解决这个问题,因为:
我需要猜测是否应该接受提醒或拒绝提醒。
切换到警报有时会引发异常,即使警告也存在。
我需要在Firefox配置文件中设置哪些首选项,以防止浏览器发出此类警报(或任何其他警报)?
Java或Python中的答案将受到高度赞赏。
由于
答案 0 :(得分:6)
据我所知,您只能全局禁用该行为。 有一个名为 dom.disable_beforeunload 的偏好设置。您应该将其值更改为true。使用Selenium,您可以创建新的自定义Firefox配置文件:
FirefoxProfile customProfile = new FirefoxProfile();
customProfile.setPreference("dom.disable_beforeunload", true);
FirefoxDriver driver = new FirefoxDriver(customProfile);
答案 1 :(得分:1)
据我所知,不可能禁用警报等本机浏览器事件,因此您只需更好地处理它们。
1)您应该能够使用alert.getText()
做出是否接受或解除警报的明智决定。
try {
WebDriverWait wait = new WebDriverWait(driver, 2);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
if ( alert.getText().contains("Are you sure you want to leave this page?")) {
alert.accept();
}
else if ( alert.getText().contains("Some other text which means you need to dismiss")) {
alert.dismiss();
}
else {
//something else
}
}
catch (Exception e) {
}
2)使用WebDriverWait来避免竞争条件。见上文
答案 2 :(得分:0)
我不认为Firefox配置文件会禁用这些特定元素,但您可以对某些静态逻辑行进行硬编码,这些逻辑在整个测试用例/项目中保持一致。
与主页上的点击一样,会自动关闭groovehark.com上的弹出框/警告信息
@Test
public void testUntitled() throws Exception {
driver.get(baseUrl + "/#!/genre/Rap/1748"); //complete URL becomes http://grooveshark.com/#!/genre/Rap/1748
driver.findElement(By.linkText("more…")).click(); // clicks a hyper-link which opens up that frame/pop-up
driver.findElement(By.id("lightbox-outer")).click(); // clicks outside the opened-up frame, or simply clicks on the main page in background
}
lightbox-outer 是主页。
答案 3 :(得分:0)
您无法禁用弹出窗口(警报),只需执行alert.accept()表示单击警告模式的ok按钮或alert.dismiss()表示单击取消或关闭按钮。
在这种情况下最糟糕的是,如果您不确定是否存在警报,则需要等待一段时间。
如果由于事件成功而出现警报(就像点击按钮一样,网页要求您确认),您不需要等待<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorControlActivated">@color/appcolor</item>
<item name="colorControlHighlight">@color/appcolor</item>
</style>
您可以通过转到下一步来节省时间,即将驾驶员切换到警报状态。即
wait.until(ExpectedConditions.alertIsPresent());
只是为了确保您可以使用较短的等待时间,但是,这取决于加载网页以加载网页加载网页时出现警报的情况。