【问题标题】:Python - Selenium can't handle alertPython - Selenium 无法处理警报
【发布时间】:2018-12-21 03:11:00
【问题描述】:

我正在尝试在一个非常旧的仅限 IE 的网页上自动执行一个过程,并且在某一时刻,它会引发警报。

我无法使用 IE 检查它(或者不知道如何),但只有一个“接受”按钮(实际上是一个图像)并且无法复制警报文本(不知道为什么)。

我在 IE 驱动程序中使用 selenium,但无法通过此警报。

Selenium 正在检测警报,但是当我检查其内容时,我什么也没得到。 我试过用

接受警报
alert_obj = self.br.switch_to.alert
alert_obj.accept()

还有

.dismiss();
.send_key(Keys.ENTER)

还有一些其他的东西。我错过了什么吗?

警报照片:

【问题讨论】:

  • 可以分享alert的截图吗?
  • 刚刚做了,对不起!
  • 返回“无法找到元素”。有什么方法可以使用 IE 检查这个弹出窗口吗?我按 F12 但没有任何反应。
  • 你检查this了吗?
  • 不是真的,我可以在其他页面中完美地使用开发人员工具。只是这个弹出窗口冻结了浏览器的其余部分。我什至无法关闭原来的浏览器!

标签: python selenium internet-explorer selenium-webdriver


【解决方案1】:

警报是包含文本和确定按钮的通用对话框。如果您的警报有一个图像作为按钮,那么它不是警报,而是其他东西。我不知道它是什么,但不是警报。

这是一个警告:

【讨论】:

  • 嗯,是的,它看起来不像那样。然而,当它弹出时,我检查了所有当前的句柄,但我只找到了一个,这意味着 Selenium 只打开了一个窗口(对吗?)另外,当我尝试发送一个回车键时,我收到一个错误,基本上说“嘿,这是一个警报,我不能那样做”。不过非常感谢!
  • @LucasCioffi 从图像上看似乎是由 javascript 添加的浮动 div。尝试使用浏览器中的检查器(按 F12)查看元素是如何添加到页面的。
  • @LucasCioffi 您的alert 可能看起来像一个新窗口,但实际上只是在同一页面中创建的另一个新元素。
  • 我试过了,但我做不到 :( 当弹出窗口出现时,除了单击“确定”之外我不能做任何其他事情,然后它会重定向到另一个页面。整个浏览器冻结。
  • @LucasCioffi 无论如何,硒警报处理功能仅适用于真正的警报,而您所拥有的不是一个 - 这就是硒不能将其作为警报处理的原因。如果不亲自查看页面,我很难说出它是什么 - 但我可以向您保证,任何与警报相关的功能都无法使用它,因为它不是警报。我希望能回答您的问题并为您指明正确的方向
【解决方案2】:

如果此弹出窗口是警报,您可以在初始化驱动程序本身时对其进行处理。下面是 C# 代码:

InternetExplorerOptions options = new InternetExplorerOptions
{               
   UnhandledPromptBehavior = UnhandledPromptBehavior.Accept,                   
};                                
driver = new InternetExplorerDriver(options);

上面的代码应该处理警报。如果没有,请尝试在创建驱动程序实例之前添加此代码。

 options.AddAdditionalCapability("browserstack.ie.enablePopups", "accept");

【讨论】:

    【解决方案3】:

    此问题可能与以下问题重复:

    How to close yet another chrome popup using python selenium

    致版主:我试图将此问题标记为重复,但是当我在搜索栏中输入“如何使用 python selenium 关闭另一个 chrome 弹出窗口”时,它没有找到任何结果。

    【讨论】:

    • 对我不起作用 :( Selenium 返回“无警报活动”错误但是当这个东西出现时我什至无法退出浏览器。
    • 代替 send_keys(keys.ENTER),试试 send_keys(u'\ue007')
    【解决方案4】:

    我设法做到了。

    我尝试了一切,但一切都是错误的。我什至不得不使用这个奇怪的循环,因为仅仅使用 time.sleep() 调用就会把事情搞砸。我真的不知道发生了什么。有时进入页面时会出现弹出句柄,有时不会出现。有时在错误的地方。有时它不会正确关闭。我尝试了一堆不同的方法,这个方法似乎有效:

    这就是我所做的:

        #Saves ID from original window
        janelaOriginal = self.br.current_window_handle
        #Go to the website
        self.br.get(url)
    
        #waits 2.5 seconds for the pop-up (time.sleep bugs)
        i = 0
        while(i < 25):
            i += 1
            time.sleep(0.1)
            #is pop-up open?:
            if(len(self.br.window_handles)>1):
                #handle sometimes appears in the wrong place so this is necessary:
                if(janelaOriginal==self.br.window_handles[0]):
                    self.br.switch_to_window(self.br.window_handles[1])
                else:
                    self.br.switch_to_window(self.br.window_handles[0])
                #close the pop-up and go back to the original window
                self.br.close()
                self.br.switch_to_window(janelaOriginal)
                #do stuff
                return
        #do other stuff
    

    【讨论】:

      猜你喜欢
      • 2023-01-02
      • 2018-11-10
      • 1970-01-01
      • 2021-11-15
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多