Selenium Python 绕过 "Open <...>.app?"

Selenium Python getting around "Open <...>.app?"

我正在尝试为 Slack 机器人编写 e2e 测试,在通过浏览器登录时,它总是询问我是否想使用 Slack 桌面应用程序而不是继续使用浏览器(它的 Chrome方式)。 Selenium 网络驱动程序正在执行的步骤:

  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. headless版本也试过了,测试失败说明弹窗打断了流程

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

试试这个 chrome_options.add_argument("--disable-notifications")chrome_options.add_argument("--disable-popup-window") 或创建用于单击取消按钮执行下一步操作的代码。

如果每次 运行 测试时都会弹出此警报,并且 Cancel 按钮始终处于焦点状态,那么您可以尝试向驾驶员发送 ENTER

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

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)

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

from pynput.keyboard import Key, Controller
keyboard = Controller()

keyboard.press(Key.enter)
keyboard.release(Key.enter)

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