Python Webdriver 如何处理浏览器弹出窗口。这不是 JavaScript 生成的警报

Python Webdriver how to handle a browser pop up. It is not an alert generated by JavaScript

我在执行 Python Webdriver 脚本时遇到了一个弹出窗口。 场景:用户可以从管理页面单击添加项目按钮并输入项目名称,然后单击保存。 如果该项目已经存在,则会显示一个弹出窗口,说明同名项目已经存在。

我想关闭这个弹出窗口。我已经检查了 HTML 并且没有单击 Java 脚本函数来调用警报。这不是 Java 脚本警报。 它是 GWT 在浏览器中生成的弹出窗口。
开发人员使用 GWT 开发 UI.

HTML是:

<div class="gwt-PopupPanel" style="visibility: visible; overflow: visible; position: absolute; left: 687px; top: 170px;">
    <div class="popupContent">
        <div class="GAT4PNUJO" style="position: relative;">
            <div style="position: absolute; z-index: -32767; top: -20ex; width: 10em; height: 10ex; visibility: hidden;" aria-hidden="true"/>
            <div style="position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px;">
                <div style="position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;">
                    <div class="GAT4PNUPO GAT4PNUNO">
                        <div class="gwt-Label GAT4PNUOO">Add Project</div>
                    </div>
                    <div class="GAT4PNUMO">
                    <div class="gwt-HTML GAT4PNUIO GAT4PNUKO">An engine message has been returned. Original message: There is already a scv project with name 'test001'</div>
                    <div class="GAT4PNUHO GAT4PNULO">
                </div>
            </div>
        </div>
    </div>

有什么方法可以检查弹出窗口是否显示,然后在 Python Webdriver 中单击它?

我在另一篇文章中读到 post 有人提到要使用 Robot。我认为那只是 Java。

我试过了

alert = self.driver.switch_to_alert()       
alert.accept()  

只是为了检查并证明它不是 Java脚本警报。显示的错误是

NoAlertPresentException: Message: No alert is active

我在尝试离开页面时遇到了同样的情况,弹出窗口询问我是否确定要离开页面。我用FF设置解决了它:

webdriver.DesiredCapabilities.FIREFOX["unexpectedAlertBehaviour"] = "accept"

然后我捕捉到异常并做我想做的事,即离开网站。我希望这对你也有用。您必须捕获异常,因为它仍然会导致异常出现并停止您的代码。

我现在已经设法解决了这个问题。我使用了以下代码:

self.driver.find_element_by_xpath("//*[text()='OK']").click()

在 IE 中单击“确定”按钮,弹出窗口关闭。