Как нажать на элемент с помощью Selenium Webdriver - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь щелкнуть всплывающее предупреждение на пользовательском интерфейсе с Selenium Webdriver.

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

щелкнуть ОК, функция всплывающего сообщения:

    try {
            WebDriverWait wait = new WebDriverWait(driver, 40);
            wait.until(ExpectedConditions.alertIsPresent());
            Alert alert = driver.switchTo().alert();
            report.log(LogStatus.INFO, "Displayed Pop-up Window Alert Message ->  " + alert.getText() + " for the Field -> " + fieldName);
            System.out.println("Displayed Pop-up Window Alert Message ->  " + alert.getText() + " for the Field -> " + fieldName);
            alert.accept();
            Thread.sleep(3000);
        } catch (NoAlertPresentException ex) {
            System.err.println("Error came while waiting for the alert popup. ");
            report.log(LogStatus.INFO, "Alert pop up box is NOT populating when user clicks on: ");
        }

Вот как выглядит HTML для всплывающего окна:

<input type="submit" name="ctl00$ctl00$Content$ContentPlaceHolderMain$Continue" value="Continue..." 
            onclick="if(warnOnDelete('ctl00_ctl00_Content_ContentPlaceHolderMain_EditRadioOptions_1',"
                    + "'Please confirm if you wish to delete.') == false) return false;" 
                    id="ctl00_ctl00_Content_ContentPlaceHolderMain_Continue" style="width:100px;">

Это должно быть в IE, нам не разрешено использовать что-либо кроме IE

Обновление: функция для полей подтверждения


        function warnOnDelete(deleteButtonID, msg) {
            var deleteRadioButton = document.getElementById(deleteButtonID);
            if (deleteRadioButton != null) {
                if (deleteRadioButton.checked == true)
                    return confirm(msg);
            }
            return true;
        }

1 Ответ

0 голосов
/ 14 июня 2019

Кажется, что элемент не Alert, а <input> элемент и click() для элемента, который вы должны вызвать WebDriverWait для elementToBeClickable(), и вы может использовать любую из следующих стратегий локатора :

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[id$='_Content_ContentPlaceHolderMain_Continue'][value^='Continue'][name$='Continue']"))).click();
    
  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[contains(@id, '_Content_ContentPlaceHolderMain_Continue') and starts-with(@value, 'Continue')][contains(@name, 'Continue')]"))).click();
    
...