如何处理没有任何元素的浏览器通知弹出窗口?
如何按照图像按OK
按钮。 我可以切换到这个窗口。 但它没有加载,直到我点击确定,所以没有任何元素。 警报手柄也没有帮助。 Autoit也无法检测到此弹出消息。 禁用通知也无法帮助。 有任何想法吗? 添加了两个screeshots。
Firefox快照:
Chrome快照:
p.companieGenreal.sActivities().click(); driver.switchTo().defaultContent(); String parent = driver.getWindowHandle(); p.companieGenreal.sAddNew().click(); p.companieGenreal.sAddJobOrder().click(); p.companieGenreal.sContract().click(); swithToChildWindow(parent); driver.switchTo().alert().accept();
要将其视为警报,请尝试以下操作:
Alert a = driver.switchTo().alert(); a.confirm();
如果可以使用Escape键关闭它,请像这样发送Escape按键(如果按Enter键,则按ENTER键 ):
Actions action = new Actions(driver); action.sendKeys(Keys.ESCAPE);
beforeunload
当窗口,文档及其资源即将卸载时,将触发beforeunload
事件。 此时文档仍然可见,事件仍然可以取消。
注意 :自2011年5月25日起, HTML5规范声明在此事件期间可能会忽略对window.alert()
, window.confirm()
和window.prompt()
方法的调用。
解
有多种方法可以禁用此弹出窗口,如下所示:
-
Firefox:如果您使用Firefox作为浏览器客户端 ,则可以使用
FirefoxOptions()
的实例并将首选项dom.disable_beforeunload
设置为true
,如下所示:System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); FirefoxOptions firefox_option = new FirefoxOptions(); firefox_option.addPreference("dom.disable_beforeunload", true); WebDriver firefox_driver = new FirefoxDriver(firefox_option); firefox_driver.get("https://stackoverflow.com/");
-
Chrome:如果您使用Chrome作为浏览器客户端 ,则可以使用
ChromeOptions()
的实例并添加参数--disable-popup-blocking
,如下所示:System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); ChromeOptions chrome_option = new ChromeOptions(); chrome_option.addArguments("--disable-popup-blocking"); chrome_option.addArguments("start-maximized"); chrome_option.addArguments("disable-infobars"); WebDriver chrome_driver = new ChromeDriver(chrome_option); chrome_driver.get("https://stackoverflow.com/");
如果这是一个警报,您可以使用以下方法处理:
1)。 driver.switchTo()警报()接受()。;
2)。 “行动课”
Actions builder=new Actions(driver); builder.sendKeys(keys.ESCAPE);
3)。如果上述两种方法都不起作用,则会有一种称为“甜蜜警报”的特殊警报类型,可以对其进行检查和编写代码。
试着用这个:
public static void acceptAlertUsingJs(WebDriver driver) { ((JavascriptExecutor)driver).executeScript("window.alert = function(msg){return true;};"); ((JavascriptExecutor)driver).executeScript("window.prompt = function(msg) { return true; }"); ((JavascriptExecutor)driver).executeScript("window.confirm = function(msg) { return true; }"); }
请尝试以下代码,看看它是否有帮助:
if (isAlertPresent()){ driver.switchTo().alert().accept(); driver.switchTo().defaultContent(); } } public static boolean isAlertPresent() { try { driver.switchTo().alert(); Thread.sleep(5000); return true; }// try catch (Exception e) { return false; }// catch }
我有一个类型的问题,模式弹出窗口打开,我可以切换到和 单击确定按钮但无法获取其中的文本。 modal dialog在屏幕截图中共享,没有html标签,因此我无法使用任何定位器找到文本。 我尝试使用driver.switchTo()。alert()。getText()来获取其中的文本。