【问题标题】:Selenium Python getting around "Open <...>.app?"Selenium Python 绕过“打开 <...>.app?”
【发布时间】:2021-01-28 14:34:36
【问题描述】:

我正在尝试为 Slack 机器人编写 e2e 测试,在通过浏览器登录时,它总是询问我是否要使用 Slack 桌面应用程序而不是继续使用浏览器(顺便说一下它的 Chrome)。 Selenium webdriver 正在执行的步骤:

  1. 访问https://company-name.slack.com
  2. 填写emailpassword
  3. 点击Sign In按钮
  4. 然后显示:

这不是正常的浏览器警报,但我想摆脱它。我尝试了以下方法:

  1. webdriver.switch_to.alert.dismiss() 不会关闭此弹出窗口
  2. 添加chrome_options.add_argument('--disable-default-apps') 开关也不会阻止弹出窗口的显示
  3. 也试过无头版本,测试失败提示弹窗中断了流程。

这也必须在 CI 服务器上工作,所以如果解决方案不涉及修改开发人员机器,那就太好了。

【问题讨论】:

    标签: python selenium google-chrome ui-automation slack


    【解决方案1】:

    嗯,这不是一个答案,而是一个解决方法。我设法通过在新选项卡中继续我的操作来绕过default-app 弹出窗口(但不是在首先检查是否有弹出窗口之前)。伪代码:

    try
        find_element_by_whatever(element_you_expect_after_login)
    catch TimeoutException
        webdriver.execute_script('window.open()')
        webdriver.switch_to.window(webdriver.window_handles[1])
        webdriver.get(url_which_required_login_in_the_first_place)
    

    【讨论】:

      【解决方案2】:

      今天我解决了这个问题,你可以简单地安装pynput模块,然后:

      from pynput.keyboard import Key, Controller
      keyboard = Controller()
      
      keyboard.press(Key.enter)
      keyboard.release(Key.enter)
      

      您可以使用键盘在 selenium 中处理打开的应用弹出窗口。

      【讨论】:

        【解决方案3】:

        试试这个chrome_options.add_argument("--disable-notifications")chrome_options.add_argument("--disable-popup-window") 或者创建一个代码来点击取消按钮进行下一步操作。

        【讨论】:

        • 您提供的两个参数并没有消除有问题的弹出窗口。我实际上是在为您建议我编写的代码寻求帮助。谢谢
        【解决方案4】:

        如果每次运行测试时都会弹出此警报,并且Cancel 按钮始终处于焦点位置,那么您可以尝试向驱动程序发送ENTER

        【讨论】:

        • 试过这个:key_action = ActionChains(webdriver) -&gt; key_action.send_keys(Keys.ENTER) -&gt; key_action.perform() 不会关闭弹出窗口
        • 发送 ENTER 时确定弹出窗口存在吗?也许 send_key 方法是在警报对话框后面的 javascript 完成之前执行的……这让我想起了一个可能的解决方案 :) 你能识别并禁用弹出警报对话框的 javascript 吗?
        • 是的,send_key 发生在一个 while 循环内(使用标准输出日志),我正在监视日志和屏幕,所以我很确定 ENTER 不会取消弹出。 禁用 JavaScript 听起来很有希望
        猜你喜欢
        • 2020-04-03
        • 2021-08-05
        • 2022-01-11
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 2022-10-01
        • 2022-09-27
        • 1970-01-01
        相关资源
        最近更新 更多