Selenium Java обрабатывает исключение объекта (диалоговое окно предупреждения) без задержки. (непредсказуемое всплывающее окно Java)

Цель: всплывающее оповещение. независимо от того, показано это или нет, я хочу, чтобы это продолжалось. если он отображается, необходимо установить флажок и нажать «Продолжить». если нет, то игнорируйте.

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

предыстория: раньше я использовал UFT, возможно, моя логика была ошибочной. всплывающее окно является предупреждением приложения (а не системой), поэтому предполагается, что «переключиться на (), принять () / отклонить () не будет работать. И я добавлю дескриптор предупреждения сразу после входа в систему и в методе входа ниже.

Фон фреймворка Selenium. : мы используем фреймворк selenium maven, serenity BDD. объект устанавливается в начале страницы. и serenity.properties обрабатывают тайм-аут по умолчанию и так далее.

Всплывающие объекты (если они появляются):

@FindBy(xpath = "//input[@id='notification-ack']")
private WebElement PcoNoticeChbx; //this is a check box, needs to be checked
@FindBy(xpath = "//button[contains(.,'Continue')]")
private WebElement PcoNoticeContinueBtn;//button to close the alert

*Способ входа *

 public void loginIntoExtApplication(String baseURL, String loginURL, String uId, String pwd, String extAppEnv)throws Exception {
            gotoExtLoginPage(baseURL, loginURL);         
            enterLoginCredential(uId, pwd);
     openAt("https://" + extAppEnv + ".programportaltest.hrsa.gov/sdms-
    extranet/index.xhtml");

Мои подходы:

//1.

     if (PcoNoticeChbx!=null) {
            PcoNoticeChbx.click();
            PcoNoticeContinueBtn.click();
        } else {
            System.out.println("Dialog didn't display, no need any action");
        }

//2. зависает здесь после входа в систему.

     if(!getDriver().findElements(By.xpath("//*[@id='submit']")).isEmpty()){
                 PcoNoticeChbx.click();
                 PcoNoticeContinueBtn.click();
            } 
             else {  
                System.out.println("Dialog didn't display, no need any action");
            } 

//3. добавленный в список просмотра не работает, он показывает ожидание, нижеприведенный код также не работает. Я запустил свой Maven в Junit в режиме отладки. раньше работало нормально. но элементы просмотра всегда отображаются (в ожидании)..

     boolean isPresent = getDriver().findElements(By.id("noticebox")).size() >0  
      System.out.println("the diaolog exist=  " + isPresent);

//4. даже попробовал метод try-catch.

try{    
             PcoNoticeChbx.click();
             PcoNoticeContinueBtn.click(); 
         }catch (Exception e){ 
            // Printing logs for my report 
             Log.error("Report Category button element is not found."); 

            // After doing my work, now i want to stop my test case 
             throw(e); 
         } 
    return;
     }  

//5. пробовал список webelemets:

List temp = webdriver.findElements(org.openqa.selenium.By.id("noticebox"));

    if (temp.Count > 0 && temp[0].Displayed) {
                    // script to execute if element is found
                } else {
                    //  continue the test
         }  

//6. и ниже

if (!WebDriver.findElements(By.xpath("//*[@id='submit']")).isEmpty()==true);


        {
                //handle the dialog 
            }  
            else{   
                //continue 
            }

// 7.пробовал с булевым значением, но и тут зависает на первых шагах

boolean Nbox = PcoNoticeChbx.isDisplayed(); {




    if (Nbox==false)
               {
             System.out.println("Dialog didn't display, no need any action");
               } 
             else if (Nbox==true) {
             PcoNoticeChbx.click() ;
             PcoNoticeContinueBtn.click();  
             }

person MemphisTony V Montana    schedule 28.07.2017    source источник
comment
при использовании кода try catch он остановился как: элемент не кликабельный.   -  person MemphisTony V Montana    schedule 28.07.2017
comment
public void checkAlert() { try { WebDriverWait wait = new WebDriverWait(getDriver(), 2); System.out.println(ПЫТАЮЩИЕСЯ шаги); ждать.до(ОжидаемыеУсловия.alertIsPresent()); org.openqa.selenium.Alert alert = getDriver().switchTo().alert(); оповещение.принять(); // } catch (Exception e) { // обработка исключений System.out.println(перехват шагов исключения); } } }   -  person MemphisTony V Montana    schedule 28.07.2017


Ответы (2)


Если это похоже на всплывающие окна, с которыми я имел дело, они работают следующим образом:

  1. Клиент заходит на сайт, и сайт проверяет наличие файла cookie. Если этот файл cookie существует, всплывающее окно никогда не запускается (идеальное состояние). Если этот файл cookie НЕ существует (типичное состояние), через указанный период времени появляется всплывающее окно.
  2. Клиент закрывает всплывающее окно, и создается файл cookie со сроком действия.
  3. По истечении этого времени срок действия файла cookie истекает, и всплывающее окно снова срабатывает.

Вам нужно провести небольшое расследование и найти файл cookie, который создается после закрытия всплывающего окна. Очистите кеш, перейдите на сайт и обратите внимание на все существующие файлы cookie. Дождитесь появления всплывающего окна и закройте его. Теперь найдите только что созданный файл cookie и изучите его. Это файл cookie, который вам нужно создать. Существует множество руководств по созданию файлов cookie. Это довольно просто.

Как только вы узнаете, как создать файл cookie, вы добавите его в свой сценарий, как описано ниже:

  1. Перейдите на какую-нибудь страницу домена, которая, как вы знаете, не существует, например. www.домен.com/some404page. Мы делаем это, потому что это не запускает обратный отсчет всплывающего окна, и нам нужно быть в домене, чтобы создать файл cookie.
  2. Создать файл cookie
  3. Сделай свой обычный тест

Больше никаких всплывающих окон.

person JeffC    schedule 29.07.2017
comment
Привет, Джефф С. На самом деле это новая идея для меня. это будет работать для некоторых моих тестов, похожих на ваши. - person MemphisTony V Montana; 31.07.2017
comment
плюс это было не предупреждение на основе файлов cookie, а DB. - person MemphisTony V Montana; 01.08.2017

Решение найдено для моего случая.

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

после использования многих методов, для этого оповещения о подтверждении javascripts. я использовал метод ниже. вся помощь метода .CurrentlyVisible(). потому что этот, и я думаю, только этот даст вам результат, даже если элемент не существует или равен нулю.

if (element(NoticeContinueBtn).**isCurrentlyVisible**()==true) {

    PcoNoticeChbx.click();
    PcoNoticeContinueBtn.click();
    //else just continue
}
person MemphisTony V Montana    schedule 31.07.2017