首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Selenium:打开扩展的弹出窗口

Selenium:打开扩展的弹出窗口
EN

Stack Overflow用户
提问于 2018-04-20 13:58:27
回答 2查看 4K关注 0票数 5

我正在尝试使用Selenium为我的扩展编写E2E测试。对于我的测试,我需要打开扩展的弹出页面,就像用户单击了扩展的徽标一样(在浏览器的右下角)。

通过使用以下命令,我已经成功地插入了带有扩展的ChromeDriver:

代码语言:javascript
运行
复制
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("...\\dist.crx"));

通过这种方式打开浏览器(web驱动程序),并根据需要安装它。但问题是我需要打开弹出式页面。

因此,我想到了一个很好的解决方案,但不幸的是没有奏效:我设置了一个键盘快捷方式来打开扩展(使用谷歌的命令API)。问题是-它只工作手动

手动选择的快捷方式(Ctrl + Shift + Y) 会根据需要打开扩展。但是当使用Selenium将这些键发送到浏览器时,什么都不会发生*

代码语言:javascript
运行
复制
Actions actions = new Actions(webDriver);
actions.sendKeys(Keys.chord(Keys.CONTROL, Keys.SHIFT, "Y")).perform();

因此,由于这个不起作用,我使用Java的机器人点击扩展的图标,给它x,y偏移坐标。这个解决方案是有效的,但它是非常丑陋和不好的,因为它不会正确地点击一个不同的屏幕。我正在努力寻找一个全局解决方案,可以在所有屏幕大小上运行。

提前谢谢。

*当我以这种方式发送密钥时,其他操作对我很有用(例如,Control +A标记所有的键)--所以我猜问题不在于我发送密钥的方式。

Clarification:,我想测试弹出页面(和后台脚本)与DOM本身(内容脚本)之间的交互。这意味着我需要让都打开弹出页面,对其执行一些操作,然后在网页的“真实”DOM上进行断言。因此,只在全屏上打开弹出页面并不能让我编写我想要的所有E2E测试。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-21 13:59:22

好吧,我成功地完成了这个任务。我使用Java的机器人发送我设置的打开扩展所需的键(Control + Shift + Y),它工作正常,弹出窗口就会打开。sendKeys没有工作,因为Selenium禁用了发送触发浏览器功能的键的能力,所以我认为这是一个不错的攻击。

代码语言:javascript
运行
复制
import java.awt.*;
import java.awt.event.KeyEvent;

private void openExtension() throws AWTException {
    Robot robot = new Robot();

    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_SHIFT);
    robot.keyPress(KeyEvent.VK_Y);
}

编辑:,当然,在按下这些键后释放这些键是个好主意(否则它们将保持按下)。因此,最终的解决方案应该是:

代码语言:javascript
运行
复制
    public void openExtension() {
    robotKeyPress(KeyEvent.VK_CONTROL, KeyEvent.VK_SHIFT, KeyEvent.VK_Y);
    robotKeyRelease(KeyEvent.VK_CONTROL, KeyEvent.VK_SHIFT, KeyEvent.VK_Y);
}

private void robotKeyPress(int... keys) {
    for (int k : keys) {
        robot.keyPress(k);
    }
}

private void robotKeyRelease(int... keys) {
    for (int k : keys) {
        robot.keyRelease(k);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-04-20 15:44:49

我的方法是直接打开页面。

换句话说,Chrome扩展中的所有页面都是包中内置的HTML页面。因此,您可以使用巧尽心思构建的URL直接打开它们。

第一步是找出您的包ID,它是一个唯一的32字符字符串.此值来自用于对包进行签名的键,因此应该是相当一致的。找到这个值的最快方法是:

  1. 打开安装了扩展的Chrome
  2. 转到扩展列表(菜单>更多工具>扩展)
  3. 在顶部确保选中"Developer模式“复选框。
  4. 在列表中找到您的扩展名,就会有一个名为"ID:“的条目:
  5. 复制此值

例如,驱动器的应用程序启动程序是"ID: lmjegmlicamnimmfhcmpkclmigmmcbeh“。

了解此值意味着您现在可以访问包中的任何页面。

代码语言:javascript
运行
复制
String EXTENSION_PROTOCOL = "chrome-extension";
String EXTENSION_ID = "lmjegmlicamnimmfhcmpkclmigmmcbeh";
indexPage = EXTENSION_PROTOCOL + "://" + EXTENSION_ID + "/index.html";
optionsPage = EXTENSION_PROTOCOL + "://" + EXTENSION_ID + "/options/options.html";

driver.get(indexPage);

这样做有几个缺点:

  • 它不会测试按钮本身
  • 页面总是全屏呈现,因此您可能会遇到一些布局问题。

如果你能解决这些问题,你至少可以测试Chrome扩展的大部分功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49943354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档