Roku WebDriver 设置是否适用于我的 Java 框架

Will Roku WebDriver setup work with my Java framework

我知道 Roku Webdriver 存储库附带 python 和 Postman 示例脚本,但我想知道我是否可以使用我的 Java 脚本(而不是 javascript)来连接并自动化.如果是这样,有没有人有任何示例如何在 Java 中设置驱动程序?

https://developer.roku.com/en-ca/docs/developer-program/dev-tools/automated-channel-testing/web-driver.md

你可以试一试Rokuality

自述文件:它是第一个为 Roku WebDriver API 提供支持的项目之一。

如果不是up-to-date,你可以拿一个核心作为你测试框架的基础

我的建议是下载 Roku 提供的解决方案,阅读 API 文档,使用他们针对 Python、JavaScript and/or Postman 的示例解决方案熟悉这项技术,然后为 Java.

编写自己的解决方案

Roku WebDriver 解决方案的核心是一个 HTTP 服务器,它发送 ECP 命令(主要是远程控制)并且能够查询 XML 被测 Roku 频道的来源以响应 JSON 有线协议格式。使用文档和示例库,为您的 Java 解决方案编写 class 将是一项直接的任务,它可以向 WebDriver HTTP 服务器发送 GET 和 POST 请求。您可以使用 Roku 提供的 Go 语言解决方案为您要支持的平台(Mac/Linux/Windows 等)上的 HTTP 服务器编译二进制文件,然后将二进制文件包含在您的解决方案中。您还需要编写一个 class 来启动和管理 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

一旦服务器 运行ning,运行 代码。确保添加自己的 IP。那位于 Roku 设备的设置中。还要添加一个关闭方法,这样您就不会收到“会话已经 运行ning”的任何错误。如果确实如此,只需重置服务器即可。

同样,这只是一个起点 - 使用 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>