Ami*_*'er 6 java selenium google-chrome-extension selenium-chromedriver selenium-webdriver
我正在尝试使用 Selenium 为我的扩展编写 E2E 测试。对于我的测试,我需要打开扩展程序的弹出页面 - 就好像用户单击了扩展程序的徽标(在浏览器的右下角)。
我已经设法使用扩展程序初始化 ChromeDriver,方法是:
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("...\\dist.crx"));
Run Code Online (Sandbox Code Playgroud)
这样,浏览器(网络驱动程序)就会根据需要打开并安装。但问题是,我需要以某种方式打开弹出页面。
所以我想到了一个很好的解决方案,但不幸的是没有奏效:我设置了一个键盘快捷键来打开扩展程序(使用 Google 的Command API)。问题是 - 它只能手动工作。
我选择的快捷方式(Ctrl + Shift + Y)根据需要手动打开扩展。但是当使用 Selenium 将这些密钥发送到浏览器时,没有任何反应*:
Actions actions = new Actions(webDriver);
actions.sendKeys(Keys.chord(Keys.CONTROL, Keys.SHIFT, "Y")).perform();
Run Code Online (Sandbox Code Playgroud)
因此,如果这不起作用,我使用 Java 的 Robot 点击扩展的图标,通过给它 x,y 偏移坐标。此解决方案有效,但它非常丑陋且不好,因为它无法在不同的屏幕上正确单击。我试图找到一个可以在所有屏幕尺寸上运行的全局解决方案。
提前致谢。
*当我以这种方式发送密钥时,其他操作对我来说效果很好(例如 Control + A 标记所有)-所以我猜问题不在于我发送密钥的方式。
说明:我想测试我的弹出页面(和后台脚本)与 DOM 本身(内容脚本)之间的交互。这意味着我需要同时打开弹出页面,对其执行一些操作,然后对网页的“真实”DOM 进行断言。因此,仅全屏打开弹出页面并不能让我编写我想要的所有 E2E 测试。
好的,我设法让它工作。我使用 Java 的机器人发送了我设置的打开扩展程序所需的键 (Control + Shift + Y),它可以工作,弹出窗口打开。sendKeys 不起作用,因为 Selenium 禁用了发送触发浏览器功能的密钥的功能,所以我想这是一个很好的 hack。
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);
}
Run Code Online (Sandbox Code Playgroud)
编辑:当然,按下这些键后释放这些键是一个好主意(否则它们将保持按下状态)。所以最终的解决方案看起来像这样:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2263 次 |
最近记录: |