java - Selenium:打开扩展的弹出窗口

标签 java selenium selenium-webdriver google-chrome-extension selenium-chromedriver

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

我已经设法使用扩展程序初始化 ChromeDriver,方法是:

ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("...\\dist.crx"));

这样,浏览器(网络驱动程序)将根据需要打开并安装。但问题是,我需要以某种方式打开弹出页面。

所以我想到了一个很好的解决方案,不幸的是没有奏效: 我设置了一个键盘快捷键来打开扩展程序(使用谷歌的 Command API )。问题是 - 它只能手动

手动选择我选择的快捷方式 (Ctrl + Shift + Y) 打开 根据需要扩展。但是当使用 Selenium 将这些 key 发送到浏览器时,没有任何反应*:

Actions actions = new Actions(webDriver);
actions.sendKeys(Keys.chord(Keys.CONTROL, Keys.SHIFT, "Y")).perform();

因此,如果这不起作用,我使用 Java 的 Robot 通过为其提供 x,y 偏移坐标来单击扩展的图标。该解决方案有效,但它非常丑陋且不好,因为它无法在不同的屏幕上正确点击。我正试图找到一个可以在所有屏幕尺寸上运行的全局解决方案。

提前致谢。

*当我以这种方式发送 key 时,其他操作对我来说效果很好(例如 Control + A 标记所有)- 所以我猜问题不在于我发送 key 的方式。

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

最佳答案

我解决这个问题的方法是直接打开页面。

换句话说,Chrome 扩展中的所有页面都只是包中内置的 HTML 页面。因此,您可以使用特制的 URL 直接打开它们。

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

  1. 打开安装了扩展程序的 Chrome
  2. 转到扩展程序列表(菜单 > 更多工具 > 扩展程序)
  3. 确保选中顶部的“开发人员模式”复选框
  4. 在列表中找到您的分机,将会有一个名为“ID:”的条目
  5. 复制这个值

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

知道这个值意味着您现在可以访问包中的任何页面。

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 扩展程序的大部分功能。

关于java - Selenium:打开扩展的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943354/

相关文章:

c# - 不支持复合类名。考虑搜索一个类名并过滤结果

java - driver.get 无法在 Selenium Webdriver、Java 中工作

java - Primefaces + MyFaces + CDI (OpenWebBeans) + WAS 8.5

java - 读取 xml - java、dom

java - Maven 阴影 : include only specific artifacts and exclude all the rest

visual-studio-2010 - 如何自动运行 Selenium WebDriver 测试用例

java - 动态添加 ImageView 并设置其位置

java - Selenium 测试后的数据库清理

java - 如何在关键字驱动和数据驱动框架中实现TestNG?

python - Selenium 可以用来突出网页的各个部分吗?