в браузере Chrome. всплывающий код проверки подлинности не работает с Selenium с использованием Java, если ваше соединение не защищено, появляется уведомление - PullRequest
0 голосов
/ 06 июля 2018

в браузере Chrome.код проверки подлинности не работает с Selenium с использованием Java, если ваше соединение не защищено, появляется уведомление

У меня есть всплывающее окно проверки подлинности в моем приложении с использованием класса и потока робота.

для обработки этого всплывающего окна проверки подлинности у меня естьсоздал отдельный поток и использовал класс робота, и он работал нормально и достиг ожидаемого результата.

, но в одном случае мой код не работал.

Проблема: в моем приложении предусмотрена функциональность, скопируйте URL и вставьте вВ браузере (Chrome) появляется всплывающее окно аутентификации, и его ожидание.

некоторое время, когда для загрузки URL-адреса требуется время, затем уведомление браузера Chrome отображается до появления всплывающего окна.если появляется уведомление браузера, мой код не работает.

см. Снимок экрана и мой код.

enter image description here

// Код для Chromebrowser

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

Любая помощь приветствуется Спасибо

1 Ответ

0 голосов
/ 06 июля 2018

Вы можете использовать код ниже, чтобы отключить уведомление для Chrome:

ChromeOptions ops = new ChromeOptions();
ops.addArguments("--disable-notifications");
System.setProperty("webdriver.chrome.driver", "path to driver");
WebDriver driver = new ChromeDriver(ops);

Для Firefox вы можете попробовать это:

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
Вы можете сделать это вручную.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...