使用 Winium 实现“Chrome Legacy Window”(Chromium) 的自动化

Ida*_*bay 8 java selenium automated-tests winium

我正在尝试使用 Winium 自动化 Windows 应用程序 GUI。该应用程序同时使用 WPF 窗口和“Chrome Legacy Window”(Chromium) 窗口。

我正在使用“Automation Spy”工具来检查 WPF 窗口内的 GUI 元素的 id,以便与 Winium 一起使用。Automation Spy 无法检查“Chrome Legacy Window”窗口中的元素,就像 Winium 无法访问这些元素一样。

“Chrome Legacy Window”是一个 WEB 窗口,因此需要使用 Selenium 进行自动化。

如何使用 Selenium 挂接 Chromium 窗口(它不是 Firefox、Chrome 等浏览器)?

Ida*_*bay 6

“远程调试端口”是我的问题的解决方案。

\n\n
    \n
  1. 我将“remote-debugging-port=XXXX”添加到我的 CEF(Chromium 嵌入式框架)命令中:\n https://blog.chromium.org/2011/05/remote-debugging-with-chrome-developer.html \这使我能够通过 localhost:XXXX 查看和管理我的应用程序的 CEF 窗口。

  2. \n
  3. 我使用 Winium 和 Selenium 来测试我的应用程序。\nWinium 用于我的所有 WPF 窗口,selenium 用于我的所有 CEF 窗口。\n我的 GUI 测试从 Winium 驱动程序开始,以打开我的应用程序并导航 WPF 窗口。\n每次我需要调试 CEF 窗口时,我都会使用带有“remote-debugging-port”参数的 selenium 打开 Chrome 驱动程序,这允许我单击该窗口内的元素。当我完成这个 chromium 窗口时,我将关闭 selenium 驱动程序并继续使用 Winium。

  4. \n
\n\n

将 Selenium 和 Winium 与 IntelliJ IDEA 结合使用

\n\n

Selenium 是一个用于测试和自动化 Web 应用程序的便携式框架。\nWinium 是一个基于 Selenium 的工具,用于在 Windows 上测试和自动化桌面应用程序。\n为了在 IntelliJ IDEA 项目中使用这些模块,请按照以下步骤操作:

\n\n
    \n
  1. 下载 selenium-server-standalone jar 文件(例如 selenium-server-standalone-3.141.59.jar)\n https://www.seleniumhq.org/download/
  2. \n
  3. 下载 winium-webdriver jar 文件(例如 winium-webdriver-0.1.0-1.jar)\n http://central.maven.org/maven2/com/github/2gis/winium/winium-webdriver/0.1.0- 1/
  4. \n
  5. 将两个 jar 添加到您的项目结构中: File \xe2\x86\x92 Project Structure \xe2\x86\x92 Dependency \xe2\x86\x92 +
  6. \n
  7. 现在所有 Selenium 和 Winium 导入都应该可以工作。例如:

    \n\n
    import org.openqa.selenium.By;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\nimport org.openqa.selenium.chrome.ChromeOptions;\nimport org.openqa.selenium.support.ui.ExpectedConditions;\nimport org.openqa.selenium.support.ui.WebDriverWait;\nimport org.openqa.selenium.winium.DesktopOptions;\nimport org.openqa.selenium.winium.WiniumDriver;\nimport org.openqa.selenium.winium.WiniumDriverService;\n
    Run Code Online (Sandbox Code Playgroud)
  8. \n
\n\n

将 ChromeDriver 与 Selenium 结合使用

\n\n

按着这些次序:

\n\n
    \n
  1. 安装 Java JDK 并将其 bin 目录添加到系统 PATH\n变量中。
  2. \n
  3. 创建一个包含所有文件的目录。本教程使用 c:\\temp。
  4. \n
  5. 下载 ChromeDriver 并解压(例如 chromedriver_win32.zip 提供 chomedriver.exe)\n https://sites.google.com/a/chromium.org/chromedriver/downloads
  6. \n
  7. 下载 selenium-server-standalone-XXX-alpha-1.zip(例如 selenium-server-standalone-4.0.0-alpha-1.zip)\n http://selenium-release.storage.googleapis.com/index。 html
  8. \n
  9. 从 Cefbuilds 下载 CEF 二进制分发客户端并解压(例如 cef_binary_76.1.13+gf19c584+chromium-76.0.3809.132_windows64.tar.bz2)\n http://opensource.spotify.com/cefbuilds/index.html
  10. \n
  11. 您的目录结构现在应该类似于:
  12. \n
\n\n
\n
c:\\temp\\\n  cef_binary_3.2171.1979_windows32_client\\\n    Release\\\n      cefclient.exe  (and other files)\n  chromedriver.exe\n  Example.java\n  selenium-server-standalone-2.44.0.jar\n
Run Code Online (Sandbox Code Playgroud)\n
\n\n

有关详细信息,您可以阅读此 wiki:\n https://bitbucket.org/chromiumembedded/cef/wiki/UsingChromeDriver.md

\n\n

将 WiniumDriver 与 Winium 结合使用

\n\n

按着这些次序:

\n\n
    \n
  1. 下载 Winium.Desktop.Driver.zip 并将其解压到 c:\\temp\n https://github.com/2gis/Winium.Desktop/releases
  2. \n
\n\n

Java代码示例

\n\n

启动 winium 驱动程序并打开您的应用程序:

\n\n
DesktopOptions desktopOption = new DesktopOptions();\ndesktopOption.setApplicationPath("Path_to_your_app.exe");\nFile drivePath = new File("C:\\\\temp\\\\Winium.Desktop.Driver.exe");\nWiniumDriverService service = new WiniumDriverService.Builder().usingDriverExecutable(drivePath).usingPort(9999).withVerbose(true).withSilent(false).buildDesktopService();\nservice.start();\nWiniumDriver winiumDriver = WiniumDriver(service, desktopOption);\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用 winium 导航和测试 WPF 窗口。例如:

\n\n
winiumDriver.findElement(By.id("someElementID")).click();\n
Run Code Online (Sandbox Code Playgroud)\n\n

创建一个 ChromeOptions 对象,其中包含所有必需的 selenium 信息,例如 chromium 客户端和远程调试端口。\n请确保将“XXXX”端口更改为远程调试端口。

\n\n
System.setProperty("webdriver.chrome.driver", "c:/temp/chromedriver.exe");\nChromeOptions chromeOptions = new ChromeOptions();\nchromeOptions.setBinary("c:/temp/cef_binary_76.1.13+gf19c584+chromium-76.0.3809.132_windows64_client/Release/cefclient.exe");\nchromeOptions.addArguments("remote-debugging-port=XXXX");\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用 chrome 选项对象打开 chrome 驱动程序 (selenium)。

\n\n
WebDriver seleniumDriver = ChromeDriver(chromeOptions);\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Chromium 窗口内使用元素。例如:

\n\n
seleniumWait.until(ExpectedConditions.visibilityOfElementLocated(By.className("someButtonClassName")));\nseleniumDriver.findElement(By.className("someButtonClassName")).click();\n
Run Code Online (Sandbox Code Playgroud)\n\n

完成 CEF 窗口后,关闭 selenium 驱动程序并继续使用 winium 驱动程序:

\n\n
seleniumDriver.quit();\nwiniumDriver.findElement(By.id("someElementID")).click();\n
Run Code Online (Sandbox Code Playgroud)\n\n

关闭主 winium 驱动程序:

\n\n
winiumDriver.quit();\n
Run Code Online (Sandbox Code Playgroud)\n