通过Python使用Selenium WebDriver打开Chrome扩展

12 投票
8 回答
25058 浏览
提问于 2025-04-18 18:53

我创建了一个Chrome扩展,它可以向数据库发起API请求,并获取与当前打开的网站相关的数据。例如,如果我打开target.com并点击这个扩展,它就会给我提供与target.com相关的数据。

我正在尝试通过Selenium WebDriver为这个扩展编写自动化测试,这样我就可以定期进行回归测试。为了测试这个扩展,我需要先打开它(通常我们是通过点击扩展图标来打开的)。

我尝试了不同的方法来点击扩展图标,但都没有成功。(比如,使用键盘快捷键ALT - 左箭头 - 空格,但这个方法在WebDriver中不起作用)。

我还尝试了这个方法(在这里提到的):

options = webdriver.ChromeOptions()
options.add_argument("--app-id = mbopgmdnpcbohhpnfglgohlbhfongabi")

但是上面的代码并不能帮助我打开扩展。

如果有人能告诉我如何在Selenium WebDriver中使用Python做到这一点,我将非常感激。

8 个回答

1

你可以使用这个方法来模拟点击扩展图标。

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.postMessage('clicked_browser_action', '*')");
1
from selenium import webdriver
option = webdriver.ChromeOptions()
option.add_extension("./testCRX/angular_ext.crx")
driver = webdriver.Chrome(chrome_options=option)
driver.get('chrome://extensions/')

要打开你添加的扩展程序,我觉得可以在 chrome://extensions/ 这个地址里设置快捷键。你可以在“键盘快捷键”里为你添加的扩展程序设置一个快捷键,然后按这个快捷键就能启动扩展程序了。

4

我们有类似的需求,正在用Selenium WebDriver开发一个Chrome插件。正如‘@Aleksandar Popovic’所说,我们无法用WebDriver点击Chrome扩展图标,因为这个图标不在网页上。

我们使用了Sikuli(一个利用图像识别的自动化工具)来点击Chrome插件。点击后,插件的弹出窗口会变成另一个浏览器窗口,所以我们需要切换窗口来对插件的弹出窗口进行操作。

下面是一个使用Java的示例代码,结合了Selenium WebDriverSikuli

Sikuli会根据图像识别来运行。在运行代码之前,需要截取Chrome浏览器的屏幕截图,并裁剪,只保留插件的部分。将这个图像保存为“AddonIcon.png”。

Sikuli会在屏幕上匹配这个图像(在我们的例子中是AddonIcon.png),并模拟点击这个图标。

import java.io.File;
import java.util.List;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.sikuli.script.App;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;
public class PageTest {

    public static void main(String[] args) {
        // Opening chrome with that addon
        ChromeOptions options = new ChromeOptions();
        options.addExtensions(new File("Path to ur chrome addon (.cxt file)"));     
        System.setProperty("webdriver.chrome.driver", "path to chromedriver.exe");
        WebDriver driver = new ChromeDriver(options);
        driver.manage().window().maximize();

        // Creating object to the Sukali screen class
        Screen s=new Screen();

        //Finding and clicking on the Addon image
         try {
            s.find("Path to the 'AddonIcon.png'");
            s.click("Path to the 'AddonIcon.png'");
        } catch (FindFailed e) {            
            e.printStackTrace();
        }

        //Wait until new Addon popup is opened.
         WebDriverWait wait = new WebDriverWait(driver, 5);      
         wait.until(ExpectedConditions.numberOfWindowsToBe(2));

         // Switch to the Addon Pop up
         String parentWindow= driver.getWindowHandle();
         Set<String> allWindows = driver.getWindowHandles();
         for(String curWindow : allWindows){             
             if(!parentWindow.equals(curWindow)){
             driver.switchTo().window(curWindow);
             }
         }

         /***********Ur code to work on Add-on popup************************/
    }
}

希望这对你有帮助。

4

我也遇到过同样的问题。为了绕过这个问题,我使用了这个链接:chrome-extension://<扩展的身份标识>/html/login.html,而不是点击图标。这样,我就可以测试这个扩展的所有功能了。

4

Selenium 只能和网页的视图进行互动,所以这个事情做不到。

我找了很久想解决这个问题,结果发现根本没有办法。

https://code.google.com/p/selenium/issues/detail?id=7805

http://grokbase.com/t/gg/selenium-developer-activity/148xndmkna/issue-7805-in-selenium-clicking-on-chrome-extension-to-open-popup

撰写回答