【发布时间】:2021-01-25 12:57:35
【问题描述】:
我知道 Roku Webdriver 存储库带有 python 和 Postman 示例脚本,但我想知道是否可以使用我的 Java 脚本(而不是 javascript)来连接并实现自动化。如果是这样,有没有人有任何示例如何在 Java 中设置驱动程序?
【问题讨论】:
标签: selenium automation appium native roku
我知道 Roku Webdriver 存储库带有 python 和 Postman 示例脚本,但我想知道是否可以使用我的 Java 脚本(而不是 javascript)来连接并实现自动化。如果是这样,有没有人有任何示例如何在 Java 中设置驱动程序?
【问题讨论】:
标签: selenium automation appium native roku
【讨论】:
我的建议是下载 Roku 提供的解决方案,阅读 API 文档,使用他们的 Python、JavaScript 和/或 Postman 示例解决方案来熟悉该技术,然后编写自己的 Java 解决方案。
Roku WebDriver 解决方案的核心是一个 HTTP 服务器,它发送 ECP 命令(主要是远程控制)并能够查询被测 Roku 通道的 XML 源以响应 JSON 有线协议格式。使用文档和示例库,为您的 Java 解决方案编写一个可以将 GET 和 POST 请求发送到 WebDriver HTTP 服务器的类将是一项直接的任务。您可以使用 Roku 提供的 Go 语言解决方案在您想要支持的平台(Mac/Linux/Windows 等)上为 HTTP 服务器编译二进制文件,然后将二进制文件包含在您的解决方案中。您还需要编写一个类来启动和管理 HTTP 服务器的状态,并可能进一步扩展解决方案以执行其他操作,例如解析来自服务器的 JSON 响应的响应、从设备捕获日志和保存屏幕截图。
虽然我没有将 Java 与 Roku WebDriver 一起使用,但我在 Roku WebDriver 发布后不久就开始使用它。我们想使用 JavaScript,当时 Roku 还没有发布他们的 JavaScript 库,所以我为我正在从事的项目编写了一个。这是一个非常简单的任务,可以参考 Roku 的 API 文档和机器人框架库。我认为你没有理由不能在 Java、C# 或类似语言中做同样的事情。
注意:另一位用户指出了 Rokuality 解决方案。虽然审查他们的实现以从中学习肯定不会有什么坏处,但它似乎有很多您可能不需要的复杂性。许多解决方案似乎旨在与 Rokuality 云服务产品交互,而此时他们的域并没有去任何地方,所以我不确定它们是否仍然正常运行。
【讨论】:
我想通了。如果有人对在 Java 中自动化它感兴趣,那么这段代码将作为起点。确保首先连接到 Go 服务器。步骤在https://developer.roku.com/en-ca/docs/developer-program/dev-tools/automated-channel-testing/automated-testing-overview.md 上。不要忘记更新 bash 或 zshrc
export GOPATH=/Users/$USER/eclipse-workspace/automated-channel-testing-master
服务器运行后,运行代码。确保添加自己的 IP。那位于 Roku 设备上的设置中。还要添加一个 close 方法,这样您就不会收到“会话已在运行”的任何错误。如果你确实得到了,只需重置服务器。
这只是一个起点 - 使用 https://developer.roku.com/en-ca/docs/developer-program/dev-tools/automated-channel-testing/web-driver.md 中的 API 真正开始自动化。
String ip ;
JSONObject json;
String cookie;
public RokuDriver(String IP) {
this.ip = IP;
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
RequestBody body = RequestBody.create("{\n\t\"ip\": \""+ip+"\"\n}", MediaType.parse("application/json"));
Request request = new Request.Builder()
.url("http://localhost:9000/v1/session")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
try {
Response response = client.newCall(request).execute();
JSONObject jsonBody = new
JSONObject(response.body().string());
cookie = jsonBody.getString("sessionId");
System.out.println(jsonBody.toString(4));
response.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
close();
}
}
public void down() {
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create("{\n\t\"button\": \"down\"\n}", MediaType.parse("application/json"));
Request request = new Request.Builder()
.url("http://localhost:9000/v1/session/"+cookie+"/press")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
try {
Response response = client.newCall(request).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
POM:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.8.1</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp-urlconnection</artifactId>
<version>4.8.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20200518</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
【讨论】: