Selenium Python 绕过 "Open <...>.app?"
Selenium Python getting around "Open <...>.app?"
我正在尝试为 Slack 机器人编写 e2e 测试,在通过浏览器登录时,它总是询问我是否想使用 Slack 桌面应用程序而不是继续使用浏览器(它的 Chrome方式)。 Selenium 网络驱动程序正在执行的步骤:
- 访问
https://company-name.slack.com
- 填写
email
和password
- 单击
Sign In
按钮
- 然后出现:
这不是正常的浏览器警告,但我想摆脱它。我尝试了以下方法:
webdriver.switch_to.alert.dismiss()
不关闭此弹出窗口
- 添加
chrome_options.add_argument('--disable-default-apps')
开关也不会阻止弹出窗口显示
- 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 中处理打开的应用程序弹出窗口。
我正在尝试为 Slack 机器人编写 e2e 测试,在通过浏览器登录时,它总是询问我是否想使用 Slack 桌面应用程序而不是继续使用浏览器(它的 Chrome方式)。 Selenium 网络驱动程序正在执行的步骤:
- 访问
https://company-name.slack.com
- 填写
email
和password
- 单击
Sign In
按钮 - 然后出现:
这不是正常的浏览器警告,但我想摆脱它。我尝试了以下方法:
webdriver.switch_to.alert.dismiss()
不关闭此弹出窗口- 添加
chrome_options.add_argument('--disable-default-apps')
开关也不会阻止弹出窗口显示 - 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 中处理打开的应用程序弹出窗口。