如何使用Selenium和Java接受“此操作无法撤消。确定要删除此愿望清单”弹出窗口

时间:2019-09-20 06:25:08

标签: javascript java selenium selenium-webdriver onbeforeunload

我需要单击浏览器通知的第一个按钮,该通知在单击按钮“删除心愿单”后显示。 该按钮如下;

  <a href="/account/wishlistupdate?mainAction=delete&amp;wishlistId=2547474" class="btn btn-danger btn-sm" onclick="return confirm('This action cannot be undone. Are you sure you want to delete this wishlist?')" style="" xpath="1">Delete wishlist</a>   

单击该按钮将打开浏览器通知。

enter image description here

我尝试过alert.accept(),但对我不起作用。

 public HomePage editWishlist(){
    click(edit_button);    //     By edit_button = By.xpath("//div[@class='btn-edit-text']");

    click(deleteWishlist_button); //    By deleteWishlist_button = By.linkText("Delete wishlist");

    try {
        Thread.sleep(1500);
    } catch(InterruptedException e) {
        System.out.println("got interrupted!");
    }

    Alert alert = driver.switchTo().alert();
    alert.accept();

    return this;
}

我该如何管理?

2 个答案:

答案 0 :(得分:0)

这是一个Javascript Confirmation Alert,您可以先switching接受它,然后accepting接受它:

driver.switchTo().alert().accept();

类似地,单击cancel可以调用方法dismiss()

答案 1 :(得分:0)

此弹出窗口,文字为

This action cannot be undone. Are you sure you want to delete this wishlist? 

...是WindowEventHandlersonbeforeunload属性的实现。


onbeforeunload

onbeforeunload混合的WindowEventHandlers属性是用于处理EventHandler事件的beforeunload。当窗口即将unload其资源时,将触发这些事件。此时,文档仍然可见,事件仍然可以取消。


解决方案

跨浏览器解决方案是禁用此对话框,将executeScript()设置 window.onbeforeunload 设置为function() {};,您可以使用以下命令解决方案:

    driver.execute_script("window.onbeforeunload = function() {};")
  

您可以在How to disable a “Reload site? Changes you made may not be saved” popup for (python) selenium tests in chrome?

中找到相关的讨论