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

我正在使用工具"Automation Spy"检查WPF窗口中与Winium一起使用的GUI元素的ID。 Automation Spy无法以与Winium无法访问这些元素相同的方式来检查“ Chrome旧版窗口”窗口中​​的元素。

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

如何使用Selenium钩住Chromium窗口,而不是像Firefox,Chrome等类似的浏览器?

最佳答案

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


我在我的CEF(铬嵌入式框架)命令中添加了“ remote-debugging-port = XXXX”:
https://blog.chromium.org/2011/05/remote-debugging-with-chrome-developer.html
这使我可以通过localhost:XXXX查看和管理应用程序的CEF窗口。
我同时使用Winium和Selenium来测试我的应用程序。
我的所有WPF窗口均使用Winium,我的所有CEF窗口均使用硒。
我的GUI测试从Winium Driver开始,以打开我的应用程序并浏览WPF窗口。
每次我需要调试CEF窗口时,我都会使用带有“ remote-debugging-port”参数的硒打开Chrome驱动程序,这使我可以单击该窗口中的元素。当我完成此铬窗口后,我将关闭硒驱动器并继续使用Winium。


将Selenium和Winium与IntelliJ IDEA一起使用

Selenium是用于测试和自动化Web应用程序的可移植框架。
Winium是基于Selenium的工具,用于在Windows上测试和自动化桌面应用程序。
为了在IntelliJ IDEA项目中使用这些模块,请按照下列步骤操作:


下载selenium-server-standalone jar文件(例如selenium-server-standalone-3.141.59.jar)
https://www.seleniumhq.org/download/
下载winium-webdriver jar文件(例如winium-webdriver-0.1.0-1.jar)
http://central.maven.org/maven2/com/github/2gis/winium/winium-webdriver/0.1.0-1/
将两个jar都添加到您的项目结构中:File→Project Structure→Dependencies→+
现在,所有硒和Winium进口产品都可以使用。例如:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.winium.DesktopOptions;
import org.openqa.selenium.winium.WiniumDriver;
import org.openqa.selenium.winium.WiniumDriverService;



将ChromeDriver与Selenium一起使用

按着这些次序:


安装Java JDK并将其bin目录添加到系统PATH
变量。
创建一个目录,其中将包含所有文件。本教程使用c:\​​ temp。
下载ChromeDriver并将其解压缩(例如chromedriver_win32.zip提供chomedriver.exe)
https://sites.google.com/a/chromium.org/chromedriver/downloads
下载selenium-server-standalone-X.X.X-alpha-1.zip(例如selenium-server-standalone-4.0.0-alpha-1.zip)
http://selenium-release.storage.googleapis.com/index.html
从Cefbuilds下载CEF二进制分发客户端并解压缩(例如cef_binary_76.1.13 + gf19c584 + chromium-76.0.3809.132_windows64.tar.bz2)
http://opensource.spotify.com/cefbuilds/index.html
您的目录结构现在应类似于以下内容:



c:\temp\
  cef_binary_3.2171.1979_windows32_client\
    Release\
      cefclient.exe  (and other files)
  chromedriver.exe
  Example.java
  selenium-server-standalone-2.44.0.jar



有关更多信息,您可以阅读以下Wiki:
https://bitbucket.org/chromiumembedded/cef/wiki/UsingChromeDriver.md

将WiniumDriver与Winium一起使用

按着这些次序:


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


Java代码示例

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

DesktopOptions desktopOption = new DesktopOptions();
desktopOption.setApplicationPath("Path_to_your_app.exe");
File drivePath = new File("C:\\temp\\Winium.Desktop.Driver.exe");
WiniumDriverService service = new WiniumDriverService.Builder().usingDriverExecutable(drivePath).usingPort(9999).withVerbose(true).withSilent(false).buildDesktopService();
service.start();
WiniumDriver winiumDriver = WiniumDriver(service, desktopOption);


使用Winium浏览和测试WPF窗口。例如:

winiumDriver.findElement(By.id("someElementID")).click();


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

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


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

WebDriver seleniumDriver = ChromeDriver(chromeOptions);


在铬窗内使用元素。例如:

seleniumWait.until(ExpectedConditions.visibilityOfElementLocated(By.className("someButtonClassName")));
seleniumDriver.findElement(By.className("someButtonClassName")).click();


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

seleniumDriver.quit();
winiumDriver.findElement(By.id("someElementID")).click();


关闭主要的Winium驱动程序:

winiumDriver.quit();

关于java - 使用Winium自动化“Chrome旧版窗口”( Chrome ),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57890068/

10-09 02:58