如何处理没有任何元素的浏览器通知弹出窗口?

时间:2018-07-27 09:44:52

标签: java selenium selenium-webdriver selenium-chromedriver geckodriver

如何根据图像按OK按钮。 我可以切换到此窗口。但是直到我单击“确定”时它才被加载,因此没有任何元素。 警报句柄也无济于事。 Autoit也无法检测到此弹出消息。 disable-notifications也无济于事。 有任何想法吗? 添加了两个快照。

Firefox快照:

Look from FF

Chrome快照:

Look from 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();

6 个答案:

答案 0 :(得分:2)

要将其视为警报,请尝试以下操作:

 Alert a = driver.switchTo().alert();
 a.confirm();

如果可以使用Escape键将其关闭,请按以下方式发送Escape键(如果在按下Enter键时将其关闭,则发送 ENTER ):

Actions action = new Actions(driver);
action.sendKeys(Keys.ESCAPE);

答案 1 :(得分:1)

之前卸载

将要卸载窗口,文档及其资源时,将触发beforeunload事件。此时文档仍可见,事件仍可取消。

注意:自2011年5月25日起,HTML5 specification声明在以下情况下对window.alert()window.confirm()window.prompt()方法的调用可能会被忽略这个事件。

解决方案

有多种方法可以禁用此弹出窗口,如下所示:

  • Firefox:如果您将 Firefox 用作 Browser Client ,则可以使用FirefoxOptions()的实例并设置首选项 { {1}} dom.disable_beforeunload ,如下所示:

    true
  • Chrome:如果您将 Chrome 用作 Browser Client ,则可以使用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/"); 的实例并添加参数 { {1}} 如下:

    ChromeOptions()

答案 2 :(得分:0)

如果这是警报,则可以使用以下方法处理:

1)。 driver.switchTo()。alert()。accept();

2)。 “动作类”

 Actions builder=new Actions(driver);
 builder.sendKeys(keys.ESCAPE);

3)。如果以上两种方法均无效,则有一种特殊的警报类型称为“甜警报”,可以对其进行检查并为此编写代码。

答案 3 :(得分:0)

尝试使用:

 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; }");
    }

答案 4 :(得分:0)

请尝试以下代码,看看是否有帮助:

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
        }

答案 5 :(得分:0)

我遇到了同样的问题,可以打开模式弹出窗口,我可以切换到该模式,然后Sample Image单击“确定”按钮,但无法获取其中的文本。模态对话框在屏幕截图中共享,并且没有html标记,因此我无法使用任何定位器在其中定位文本。我尝试使用driver.switchTo()。alert()。getText()来获取其中存在的文本。