java - 如何使用网络驱动程序关闭网页上的模式对话框 - Java

标签 java selenium modal-dialog webdriver

我正在尝试关闭出现在主要使用 selenium 网络驱动程序和 Java 的网页上的对话框,但没有任何结果。我的代码:

   @When("^I am on second page I click on close button in pop up$")
    public void i_am_on_second_page_I_click_on_close_button_in_pop_up() throws Throwable {
        driver.findElement(By.xpath("//*[@id=\"ngdialog2\"]/div[2]/promo-banner/div/div/div[2]/div/dialog-body/div[1]/div[2]")).click();
        driver.switchTo().activeElement();

我得到:java.lang.NullPointerException

java.lang.NullPointerException
    at SeconPage.i_am_on_second_page_I_click_on_close_button_in_pop_up(SeconPage.java:17)
    at ✽.When I am on second page I click on close button in pop up(SeconPage.feature:7)

我错过了什么?

<div class="dialog-body">
    <div ng-transclude="dialogBodySlot">
        <dialog-body>
            <div class="promo-popup-top">
                <picture><img class="promo-popup-image"
                              ng-srcset="/etc/designs/ryanair/frontend/resources/ui/illustrations/products/family-popup.png, /etc/designs/ryanair/frontend/resources/ui/illustrations/products/family-popup@2x.png"
                              srcset="/etc/designs/ryanair/frontend/resources/ui/illustrations/products/family-popup.png ,/etc/designs/ryanair/frontend/resources/ui/illustrations/products/family-popup@2x.png">
                </picture>
                <div class="icon-115 promo-popup-icon-family"><img
                        ng-src="/etc/designs/ryanair/frontend/resources/ui/illustrations/products/family-extra-logo.png"
                        src="/etc/designs/ryanair/frontend/resources/ui/illustrations/products/family-extra-logo.png">
                </div>
                <div class="promo-popup-close" ng-click="$ctrl.onClose()">
                    <core-icon class="icon-16 fill-c-light-base" icon-id="glyphs.close">
                        <div>
                            <svg tabindex="-1" focusable="false" role="img">
                                <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/pl/pl/#glyphs.close"
                                     ng-href="/pl/pl/#glyphs.close"></use>
                            </svg>
                        </div>
                    </core-icon>
                </div>
                <div class="popup-message-shadow"><!----><p ng-if="::!$ctrl.firstName" class="first-message"
                                                            translate="common.components.family_extra_popup.message1"
                                                            translate-default="">Witaj!</p><!----><!----><h3
                        class="second-message" translate="common.components.family_extra_popup.message3"
                        translate-default=""><span class="yellow-text">Zaoszczędź </span>na kolejnej podróży dzięki
                    naszym super ofertom <span class="yellow-text">Family Extra</span></h3></div>
            </div>
            <div class="promo-popup-benefits family">
                <ul class="family-benefits-list"><!---->
                    <li ng-repeat="benefit in ::$ctrl.popupBenefits track by $index" class="family-benefit">
                        <core-icon class="icon-40 family-benefit-icon"
                                   ng-class="::$ctrl.popupResources.class + '-benefit-icon'" icon-id="baggage">
                            <div>
                                <svg tabindex="-1" focusable="false" role="img">
                                    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/pl/pl/#baggage"
                                         ng-href="/pl/pl/#baggage"></use>
                                </svg>
                            </div>
                        </core-icon>
                        <span class="family-benefit-text" translate="common.components.family_extra_popup.benefit1"
                              translate-default="">50% zniżki na bagażu (15&nbsp;kg) dzieci</span></li><!---->
                    <li ng-repeat="benefit in ::$ctrl.popupBenefits track by $index" class="family-benefit">
                        <core-icon class="icon-40 family-benefit-icon"
                                   ng-class="::$ctrl.popupResources.class + '-benefit-icon'"
                                   icon-id="priority-boarding">
                            <div>
                                <svg tabindex="-1" focusable="false" role="img">
                                    <use xmlns:xlink="http://www.w3.org/1999/xlink"
                                         xlink:href="/pl/pl/#priority-boarding"
                                         ng-href="/pl/pl/#priority-boarding"></use>
                                </svg>
                            </div>
                        </core-icon>
                        <span class="family-benefit-text" translate="common.components.family_extra_popup.benefit2"
                              translate-default="">50% zniżki na usługę Priority Boarding dla dzieci</span></li><!---->
                    <li ng-repeat="benefit in ::$ctrl.popupBenefits track by $index" class="family-benefit">
                        <core-icon class="icon-40 family-benefit-icon"
                                   ng-class="::$ctrl.popupResources.class + '-benefit-icon'" icon-id="insurance-shield">
                            <div>
                                <svg tabindex="-1" focusable="false" role="img">
                                    <use xmlns:xlink="http://www.w3.org/1999/xlink"
                                         xlink:href="/pl/pl/#insurance-shield" ng-href="/pl/pl/#insurance-shield"></use>
                                </svg>
                            </div>
                        </core-icon>
                        <span class="family-benefit-text" translate="common.components.family_extra_popup.benefit3"
                              translate-default="">50% zniżki na ubezpieczenie dla dzieci</span></li><!---->
                    <li ng-repeat="benefit in ::$ctrl.popupBenefits track by $index" class="family-benefit">
                        <core-icon class="icon-40 family-benefit-icon"
                                   ng-class="::$ctrl.popupResources.class + '-benefit-icon'" icon-id="seat">
                            <div>
                                <svg tabindex="-1" focusable="false" role="img">
                                    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="/pl/pl/#seat"
                                         ng-href="/pl/pl/#seat"></use>
                                </svg>
                            </div>
                        </core-icon>
                        <span class="family-benefit-text"
                              translate="common.components.family_extra_popup.mandatory_seat_benefit"
                              translate-default="">Darmowe miejsca rezerwowane dla dzieci poniżej 12. roku życia</span>
                    </li><!----></ul>
                <button class="core-btn-primary core-btn-phone-full" ng-click="$ctrl.onClose()"
                        translate="trips.biz_plus_popup.close" translate-default="">Kontynuuj wyszukiwanie
                </button>
            </div>
        </dialog-body>
    </div>
</div>

最佳答案

如果警报确实存在,那么:

if(driver.switchTo().alert() != null)
{
    Alert alert = driver.switchTo().alert();
    alert.dismiss(); 
}

如果你必须等待它出现:

try {
    WebDriverWait wait = new WebDriverWait(driver, 8);
    wait.until(ExpectedConditions.alertIsPresent());
    Alert alert = driver.switchTo().alert();
    alert.accept();
} catch (Exception e) {
    //handle the exception
}

关于java - 如何使用网络驱动程序关闭网页上的模式对话框 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42710018/

相关文章:

modal-dialog - 将数据从子模式传递给父模式

java - Java 中的 UTF-8 字符编码

java - 如何根据SFTP适配器的Spring集成中的文件名生成传入文件的动态本地目录

vba - Selenium-vba 按类名获取元素

ruby - 如何为 Chrome 构建远程 Webdriver

c++ - 模态对话框变为非模态

java - H2 WebServer 打开带有预填充信息的 Web 控制台

Java 拆分(字符串操作)

selenium - 在 Selenium 中捕获 JavaScript 错误

iphone UIAlertView 模式