如何在Windows 10上构建winium驱动服务?

2024-01-07

我正在使用以下类代码通过 WiniumDriver 启动计算器。在创建 WiniumDriver 实例之前,我将启动一个 winium 驱动程序服务。

import java.io.File;
import java.io.IOException;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.winium.DesktopOptions;
import org.openqa.selenium.winium.WiniumDriver;
import org.openqa.selenium.winium.WiniumDriverService;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class CalculatorTest {

    static WiniumDriver driver = null;
    static WiniumDriverService service = null;
    static DesktopOptions options = null;

    @BeforeClass
    public static void setupEnvironment(){
        options = new DesktopOptions(); //Instantiate Winium Desktop Options
        options.setApplicationPath("C:\\Windows\\System32\\calc.exe");
        File driverPath = new File("C:\\Winium\\Winium.Desktop.Driver.exe");
        System.setProperty("webdriver.winium.desktop.driver","C:\\Winium\\Winium.Desktop.Driver.exe");
        service = new WiniumDriverService.Builder().usingDriverExecutable(driverPath).usingPort(9999).withVerbose(true)
                .withSilent(false).buildDesktopService();
        try {
            service.start();
        } catch (IOException e) {
            System.out.println("Exception while starting WINIUM service");
            e.printStackTrace();
        }
    }

    @BeforeTest
    public void startDriver(){
        driver = new WiniumDriver(service,options);
    }

    @AfterTest
    public void stopDriver(){
        driver.close();
    }

    @AfterClass
    public void tearDown(){
        service.stop();
    }

作为 TestNG 项目运行测试类后,观察到以下异常。

FAILED CONFIGURATION: @BeforeTest startDriver
java.lang.NullPointerException
    at org.openqa.selenium.winium.WiniumDriverCommandExecutor.<init>(WiniumDriverCommandExecutor.java:59)
    at org.openqa.selenium.winium.WiniumDriver.<init>(WiniumDriver.java:75)
    at com.bravura.automation.CalculatorTest.startDriver(CalculatorTest.java:41)

我仔细检查了 calc.exe 和 Winium.Desktop.Driver.exe 的路径,但仍然无法启动 WiniumDriverService。还有其他方法可以启动这个服务吗? winium支持windows 10吗?


这里的问题是,'startDriver'之前正在执行setupEnvironment方法和变量service and options没有初始化。因此它抛出空指针异常。

因为执行顺序在testNG下面给出。

@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite

共有三种解决方案。

  1. 更改以下方法的注释,如下所示。这样,启动驱动程序将在设置环境方法之后运行。

     @BeforeMethod
     public void startDriver(){
        driver = new WiniumDriver(service,options);
     }
    
    @AfterMethod
    public void stopDriver(){
       driver.close();
    }
    
  2. 更改注释,如下所示。

    @BeforeTest
    public static void setupEnvironment(){
        options = new DesktopOptions(); //Instantiate Winium Desktop Options
        options.setApplicationPath("C:\\Windows\\System32\\calc.exe");
        File driverPath = new File("C:\\Winium\\Winium.Desktop.Driver.exe");
        System.setProperty("webdriver.winium.desktop.driver","C:\\Winium\\Winium.Desktop.Driver.exe");
        service = new WiniumDriverService.Builder().usingDriverExecutable(driverPath).usingPort(9999).withVerbose(true)
                .withSilent(false).buildDesktopService();
        try {
            service.start();
        } catch (IOException e) {
            System.out.println("Exception while starting WINIUM service");
            e.printStackTrace();
        }
    }
    
    @BeforeClass
    public void startDriver(){
        driver = new WiniumDriver(service,options);
    }
    
    @AfterClass
    public void stopDriver(){
        driver.close();
    }
    
    @AfterTest
    public void tearDown(){
        service.stop();
    }
    
  3. 更改注释,如下所示。我相信,这将是最佳解决方案。

    @BeforeTest
    public static void setupEnvironment(){
        options = new DesktopOptions(); //Instantiate Winium Desktop Options
        options.setApplicationPath("C:\\Windows\\System32\\calc.exe");
        File driverPath = new File("C:\\Winium\\Winium.Desktop.Driver.exe");
        System.setProperty("webdriver.winium.desktop.driver","C:\\Winium\\Winium.Desktop.Driver.exe");
        service = new WiniumDriverService.Builder().usingDriverExecutable(driverPath).usingPort(9999).withVerbose(true)
                .withSilent(false).buildDesktopService();
        try {
            service.start();
        } catch (IOException e) {
            System.out.println("Exception while starting WINIUM service");
            e.printStackTrace();
        }
    }
    
    @BeforeMethod
    public void startDriver(){
        driver = new WiniumDriver(service,options);
    }
    
    @AfterMethod
    public void stopDriver(){
        driver.close();
    }
    
    @AfterTest
    public void tearDown(){
        service.stop();
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Windows 10上构建winium驱动服务? 的相关文章

  • 我们如何在robotframework中同时传递不同的浏览器

    Variables BROWSER firefox URL http url Delay 0 在我的 settings txt 文件中 我有一个名为 BROWSER 的变量并关联值 如上所示 它是 firefox 但我想要的是 Variab
  • 自动更新软件的设计[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 简而言之 您将如何设计一个支持简单可靠的自动更新的应用程序 我对如何分割它以及涉及的各种操作感兴趣 编辑 这与这个问题相关 自毁应用程序 htt
  • 如何更改选项卡控件的名称

    我在 C WinForms 应用程序中使用选项卡控件 我想更改选项卡的标题 默认情况下它们是 tabPage1 tabPage2 等 一种无需代码即可实现的懒惰方法 选择选项卡控件 Go to properties use F4 to do
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 更改 mingw' 启动目录或创建 mingw 符号链接

    设置 mingw 控制台启动目录的最简单方法是什么 我只使用 mingw 进行编译 但由于缺乏编辑器甚至符号链接 我很困惑如何告诉 mingw 控制台出现在不同的目录而不是常规的主目录中 如果有人知道如何像 cygwin 那样将 真正的 符
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • 为什么 Selenium RC 这么慢?

    一段时间以来 我一直在研究 Selenium RC 以便对我的 Web 应用程序进行功能测试 我现在发现了一种非常有效的测试策略 以至于我不想放弃 Selenium RC 在花了数周时间试图找到一种验证 ASP NET 验证控件的好方法之后
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    我有兴趣让 TensorFlow 在 Windows 上运行 但目前我意识到这是不可能的 因为某些依赖项无法在 Windows 上使用 例如巴泽尔 之所以出现这种需求 是因为据我目前了解 从 TensorFlow 访问 GPU 的唯一方法是
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • RemoteWebDriver 和 WebDriver 有什么区别?

    实际上 我找不到一个很好的解释来解释 RemoteWebDriver 和 Selenium 中的 WebDriver 之间的区别 下面是 eclipse 告诉我将 WebDriver 转换为 RemoteWebDriver 的代码 Remo
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔

随机推荐

  • 随着 TestFlight 被 iTunes Connect 取代,企业应用 Beta 测试将会发生什么?

    我在 中找不到任何有关企业 Beta 测试的信息iTunes Connect 开发人员指南 https developer apple com library ios documentation LanguagesUtilities Con
  • 扩展jQuery的ajax功能

    我想扩展 ajax 函数 以便每当调用它时 页面上就会出现一个图像 指示正在加载内容 我可以使用本页讨论的预过滤器http api jquery com extending ajax http api jquery com extendin
  • 在 WinDbg 中定义自定义错误检查代码

    有没有一种方法可以定义自定义代码 带有消息 描述等 以便当我在 Windows 的内核模式驱动程序中调用KeBugCheckEx要发出自定义 BugCheck 代码 WinDbg 会显示该自定义 BugCheck 代码附带的关联消息吗 有关
  • 使用虚拟目录将 ASP.NET MVC 部署到 IIS 5/6

    我有一个 asp net MVC 应用程序 我想使用虚拟目录将其部署到 IIS 5 和 或 6 我已经执行了通配符路由 但相对路径有问题 假设我创建了一个名为 myApp 的虚拟目录 部署后我可以去http localhost myApp
  • pandas DataFrame旋转问题

    我有一些格式有点奇怪的雷达数据 我不知道如何使用 pandas 库正确地旋转它 My data speed time loc A 63 0000 B 61 0000 C 63 0000 D 65 0000 A 73 0005 B 71 00
  • FreeT 生成的解释器 monad 转换器的 MonadFix 实例?

    我有一个由以下命令生成的标准解释器 monad 转换器的简化版本FreeT data InteractiveF p r a Interact p r gt a type Interactive p r FreeT InteractiveF
  • 找出给定函数中调用了哪些函数[重复]

    这个问题在这里已经有答案了 可能的重复 在 R 中生成调用图 https stackoverflow com questions 4795982 generating a call graph in r 我想系统地分析给定的函数 以找出该函
  • 雄猫并没有停止。我该如何调试这个?

    我有一个Tomcat 7在我启动的 Linux 中运行 CATALINA HOME bin startup sh并通过关闭 CATALINA HOME bin shutdown sh from etc init d 除了 1 个问题外 一切
  • Qt 中的阿拉伯语与 QString

    我想向我的 Qt 应用程序添加阿拉伯语标题 但没有成功 这是我的代码 include mainwindow h include
  • Java 1.6 中的枚举类主体功能

    enum CoffeeSize BIG 8 HUGE 10 OVERWHELMING 16 public String getLidCode return A private int ounces public int getOunces
  • 使用 stackdriver CLI 查找时间戳之间的日志

    我需要使用 stackdriver CLI 查找两个时间戳之间的日志 我使用了下面的命令 gcloud beta logging read timestamp gt 2017 02 19T00 00 00Z AND timestamp lt
  • 中止多文件上传 AJAX 请求

    我试图用进度条中止多个文件上传 显示进程的状态 我想要实现的是在单击中止按钮时完全中止多个文件上传 停止进度条并清除在最初触发的多个文件上传过程中可能已上传的每个文件 下面是我的代码 var AJAX ajax xhr function v
  • 如何让 python 脚本安全退出?

    这是我有一个必须输入的密码的情况 如果输入错误 脚本将无法继续并自行退出 但我怎样才能告诉脚本安全地退出呢 I tried sys exit 但这会产生回溯错误 并且看起来不是一个非常干净的退出方法 实际上 sys exit 只会抛出一个S
  • AWS lambda无服务器网站会话维护

    我使用 Node js 作为后端开发了一个网站 最近我正在尝试将其变成无服务器并部署到 lambda 我将重写大部分代码 但只是还没弄清楚如何在用户登录后维护会话 我使用的是 express session 模块 会话数据全部记录在数据库中
  • 启动ejb bean不工作

    我正在尝试使用启动 ejb 在启动时做一些事情 但我的豆子从来没有被调用过 这是我的豆子 import javax annotation PostConstruct import javax ejb Startup import javax
  • Django cookies 在电子邮件地址周围放置双引号

    在我的登录脚本中 它为用户登录其电子邮件地址和密码创建一个 cookie 我遇到的问题是 当设置电子邮件地址时 它将整个电子邮件地址放在双引号之间 我怎样才能让它不呢 if request method POST post request
  • iOS9 self.canDisplayBannerAds = true 不显示任何广告 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 非常简单的iAd代码 import UIKit import iAd class ViewController UIViewCon
  • Linux 上的 SAFEARRAY

    我在 Linux 上使用一个专有库 它使用SAFEARRAY输入回调函数 HRESULT Write SAFEARRAY Data SAFEARRAY在头文件中定义为typedef void SAFEARRAY 我必须定义一个回调函数来获取
  • ASP.NET MVC Html.Editor 将模型传递给编辑器模板

    我有一个名为 Address cshtml 的编辑器模板 其模型定义为 model Acme Models Address 在视图中 我想调用编辑器模板并传递相同类型的局部变量 并定义它将用于变量的名称 我尝试了很多方法 包括 Html E
  • 如何在Windows 10上构建winium驱动服务?

    我正在使用以下类代码通过 WiniumDriver 启动计算器 在创建 WiniumDriver 实例之前 我将启动一个 winium 驱动程序服务 import java io File import java io IOExceptio