sách gpt4 ai đã đi

Vô hiệu hóa (tắt) chế độ xem trước bản in của Chrome bằng Java + Selenium java chrome google-chrome-print

In lại 作者:行者123 更新时间:2023-12-02 09:45:44 29 4
mua khóa gpt4 Nike

我的 Selenium 测试看起来像这样:客户选择金融产品,填写一些必要的数据,并在打印预览中显示条款/协议(protocol)文档(根据本地法律的要求)。打印/关闭打印预览对话框后,客户输入更多数据并进一步进行,选择一些选项,最后获得契约(Contract)的另一个打印预览。之后他确认契约(Contract)并完成流程。我针对 Chrome 版本 75 运行测试。

到目前为止我已经尝试过两件事:1. 使用 Selenium 切换到打印预览,通过 DOM 导航到“取消”按钮并单击它。但由于该对话框使用了 Shadow DOM,因此非常丑陋,难以维护,并且在 Chrome 更新后经常崩溃。2.尝试使用awt中的Robot类,它在本地运行时运行良好,但在Selenium网格上运行时失败,因为Chrome窗口没有聚焦并且不接收键盘事件。

处理打印对话框关闭的方法的当前状态:

    public void closePrintPreview() {
WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(driver -> driver.getWindowHandles().size() > 1);
driver.switchTo().window(driver.getWindowHandles().toArray()[1].toString());

wait.until(d -> {
if (d.getWindowHandles().size() > 1) {
d.switchTo().window(driver.getWindowHandles().toArray()[1].toString());
thử {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ESCAPE);
robot.keyRelease(KeyEvent.VK_ESCAPE);
} catch (AWTException e) {
throw new RuntimeException(e);
}
trả về false;
}
trả về giá trị đúng;
});

driver.switchTo().window(driver.getWindowHandles().toArray()[0].toString());
}

所以我的问题是,是否有一种更简单的方法可以在打印预览中获取“取消”按钮,或者是否有某种方法可以强制 Chrome 窗口聚焦,以便它可以接收来自 Robot 的关键事件?

1 Câu trả lời

这是Python中的解决方案。

您可以更新它以在 java 中工作。

Python:

def cancelPrintPreview():
# get the current time and add 180 seconds to wait for the print preview cancel button
endTime = time.time() + 180
# switch to print preview window
driver.switch_to.window(driver.window_handles[-1])
trong khi Đúng:
thử:
# get the cancel button
cancelButton = driver.execute_script(
"return document.querySelector('print-preview-app').shadowRoot.querySelector('#sidebar').shadowRoot.querySelector('print-preview-header#header').shadowRoot.querySelector('paper-button.cancel-button')")
if cancelButton:
# click on cancel
cancelButton.click()
# switch back to main window
driver.switch_to.window(driver.window_handles[0])
return True
ngoại trừ:
vượt qua
time.sleep(1)
if time.time() > endTime:
driver.switch_to.window(driver.window_handles[0])
phá vỡ

Java:

  public void closePrintPreview() {
String jsCancel = "return document.querySelector('print-preview-app')" +
".shadowRoot.querySelector('#sidebar')" +
".shadowRoot.querySelector('print-preview-header#header')" +
".shadowRoot.querySelector('paper-button.cancel-button')";
WebDriverWait wait = new WebDriverWait(driver, 5);
JavascriptExecutor jse = (JavascriptExecutor) driver;
WebElement cancelButton;

wait.until(driver -> driver.getWindowHandles().size() > 1);
driver.switchTo().window(driver.getWindowHandles().toArray(new String[0])[1]);

while (driver.getWindowHandles().size() > 1) {
driver.switchTo().window(driver.getWindowHandles().toArray(new String[0])[1]);
cancelButton = (WebElement) jse.executeScript(jsCancel);
cancelButton.click();
}

driver.switchTo().window(driver.getWindowHandles().toArray(new String[0])[0]);
}

你可以查看我的回答đây有关使用影子根元素的更多信息。

关于java - 使用 Java + Selenium 关闭(关闭)Chrome 打印预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56678891/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com