如何接受在Selenium中安装扩展时显示的弹出窗口?

时间:2014-11-12 22:20:26

标签: python google-chrome selenium google-chrome-extension selenium-chromedriver

我正在使用selenium进行一些浏览器自动化。我需要在浏览器中为我的工作安装扩展程序。我这样做:

import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
executable_path = "/usr/bin/chromedriver"
options = Options()
options.add_extension('/home/TheRookie/Downloads/extensionSamples/abhcfceiempjmchhhdhbnkbimnfpckgl.crx')
browser = webdriver.Chrome(executable_path=executable_path, chrome_options=options)

浏览器正常启动,但系统会提示我弹出窗口以确认我要添加扩展程序,如下所示:

enter image description here

在我弹出这个弹出窗口之后,很快就会返回Python,但会出现以下异常:

  

selenium.common.exceptions.WebDriverException:消息:u'未知   错误:无法等待加载扩展背景页面:   铬扩展://abhcfceiempjmchhhdhbnkbimnfpckgl/toolbar.html \ n从   未知错误:找不到页面:   铬扩展://abhcfceiempjmchhhdhbnkbimnfpckgl/toolbar.html \ n   (司机信息:chromedriver = 2.12.301324   (de8ab311bc9374d0ade71f7c167bad61848c7c48),平台= Linux的   3.13.0-39-generic x86_64)'

我尝试使用以下代码将弹出窗口作为常规JavaScript警报处理:

alert = browser.switch_to_alert()
alert.accept()

然而,这并没有帮助。谁能告诉我如何在没有弹出窗口或接受弹出窗口的情况下安装此扩展程序?任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

通常,由于该安装对话框,您无法使用 Selenium 测试Chrome扩展程序的内联安装。在野外有一些例子展示了如何在Selenium之外使用外部工具来解决这个问题,但这些不是非常便携(即特定于平台)并且依赖于Chrome的UI状态,这不能保证一致

但这并不意味着您无法测试内联安装。如果将chrome.webstore.install替换为行为类似于chrome.webstore.install API的替换(但没有对话框),则最终结果对于所有意图和目的都是相同的。

“像chrome.webstore.install这样的行为”由两件事组成:

  • 错误报告和回调调用中的行为相同。
  • 已安装扩展程序。

我刚刚在Github上设置了这样一个示例,其中包括帮助扩展/ app的源代码和一些使用Selenium(PythonJava)的示例。我建议阅读README和源代码,以便更好地了解发生的情况:https://github.com/Rob--W/testing-chrome.webstore.install

该示例不要求Chrome网上应用店中提供经过测试的扩展程序。它甚至没有连接到Chrome网上应用店。特别是,它不会检查运行测试的网站是否列为经过验证的网站which is required for inline installation to work

答案 1 :(得分:0)

我有一些非常大的代码,如果必须使用Java,我必须重新编写代码。幸运的是,python有一个用于自动化GUI事件的库,名为ldtp。我用它来自动点击"添加"按钮。我在以下几行做了一些事情:

from ldtp import *
from threading import Thread 
import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def thread_function():
    for i in range(5):
        if activatewindow('Confirm New Extension'):
            generatekeyevent('<left><space>')
            break
        time.sleep(1)

def main():
    executable_path = "/usr/bin/chromedriver"
    options = Options()
    options.add_extension('/home/TheRookie/Downloads/extensionSamples/abhcfceiempjmchhhdhbnkbimnfpckgl.crx')
    thread.start()
    browser = webdriver.Chrome(executable_path=executable_path, chrome_options=options)

希望它对某人有帮助。