在Chrome浏览器中。如果您的连接不安全,Java使用Selenium验证弹出代码不起作用通知出现
我在我的应用程序中使用机器人类和线程处理身份验证弹出窗口。
为了处理这个身份验证弹出窗口,我创建了单独的线程并使用机器人类,它工作正常并达到了预期的结果。
但在一种情况下,我的代码不起作用。
问题:在我的应用程序提供的功能复制URL粘贴在浏览器(Chrome)然后出现身份验证弹出窗口和预期。
一些时间当URL花时间加载然后chrome浏览器显示通知弹出窗口出现之前.如果浏览器通知出现我的代码是不工作。
请参阅屏幕截图和我的代码。
//Chrome浏览器代码
>else if (CONFIG.getProperty("browserType").equals("Chrome")){
>System.setProperty("webdriver.chrome.driver",CONFIG.getProperty("driverPath")+"chromedriver.exe");
>String downloadFilepath = filePath;
>HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
> chromePrefs.put("profile.default_content_settings.popups",0);
> //1-Allow, 2-Block, 0-default
>chromePrefs.put("profile.default_content_setting_values.notifications",> 0);
>chromePrefs.put("download.default_directory", downloadFilepath);
> chromePrefs.put("profile.content_settings.plugin_whitelist.adobe-flash-player", 1);
>chromePrefs.put("profile.content_settings.exceptions.plugins.*,*.per_resource.adobe-flash-player", 1);
>chromePrefs.put("PluginsAllowedForUrls", CONFIG.getProperty("websiteUrl"));
> ChromeOptions options = new ChromeOptions();
> HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
>options.setExperimentalOption("prefs", chromePrefs);
>
>options.addArguments("disable-popup-blocking");
>options.addArguments("--disable-notifications");
>options.addArguments("disable-infobars");
>options.addArguments("--disable-web-security");
>options.addArguments("--allow-running-insecure-content");
>options.addArguments("--test-type");
>options.addArguments("--start-maximized");
>// Enable Flash for this site
> DesiredCapabilities cap = DesiredCapabilities.chrome();
> cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
> cap.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION,
> true);
> cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
> cap.setCapability(ChromeOptions.CAPABILITY, options);
> driver = new ChromeDriver(cap);
>
> APP_LOGS.debug("Chrome Browser launch successfully");
> isBrowserOpened=true;
> String waitTime=CONFIG.getProperty("default_implicitWait");
> driver.manage().timeouts().implicitlyWait(Long.parseLong((waitTime).trim()),
> TimeUnit.SECONDS);
> driver.manage().timeouts().pageLoadTimeout(150, TimeUnit.SECONDS);
}
//句柄身份验证弹出线程的内部类
公共类HandleAuthWindow实现Runnable{
@Override
public void run() {
try {
AuthWindow();
} catch (Exception ex) {
System.out.println("Error in Login Thread: " + ex.getMessage());
}
}
public void AuthWindow() throws Exception {
//wait - increase this wait period if required
Thread.sleep(10000);
//create robot for keyboard operations
Robot rb = new Robot();
//Enter user name by ctrl-v
StringSelection username = new StringSelection(CONFIG.getProperty("username"));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(username, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//tab to password entry field
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
Thread.sleep(2000);
//Enter password by ctrl-v
StringSelection pwd = new StringSelection(CONFIG.getProperty("password"));
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(pwd, null);
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_V);
rb.keyRelease(KeyEvent.VK_CONTROL);
//press enter
rb.keyPress(KeyEvent.VK_ENTER);
rb.keyRelease(KeyEvent.VK_ENTER);
//wait
Thread.sleep(3000);
}
}
//在我们的测试用例中调用此线程请参阅下面//在当前浏览器中打开新选项卡并将焦点转移到新选项卡上
((JavascriptExecutor)driver).executeScript("window.open('about:blank','_blank')");
>Thread.sleep(1000);
>ArrayList<String> tabs=new
> ArrayList<String>(driver.getWindowHandles());
>
> driver.switchTo().window(tabs.get(1));
> try {
>//create new thread for interaction with windows authentication
>(new Thread(new HandleAuthWindow())).start();
>//openning copyodta url
> driver.get(DataLink); } catch (Exception e) {
> System.out.println("Exception Found while handling Auth Popup window
> and launching CopyOdata Url , "); ); }
任何帮助都很感激谢谢
您可以使用以下代码禁用chrome的通知:
ChromeOptions ops = new ChromeOptions();
ops.addArguments("--disable-notifications");
System.setProperty("webdriver.chrome.driver", "path to driver");
WebDriver driver = new ChromeDriver(ops);
对于火狐,你可以试试这个:
System.setProperty("webdriver.gecko.driver","path to driver");
FirefoxProfile ffprofile = new FirefoxProfile();
ffprofile.setPreference("dom.webnotifications.enabled", false);
WebDriver driver = new FirefoxDriver(ffprofile);
它已被弃用,但仍然是您可以尝试的解决方案。
供参考:https://superuser.com/questions/959269/disabling-the-enable-notifications-popup-in-firefox
您可以手动执行。
希望对你有帮助。