如何在Windows10上搭建winium Driver服务?
How to build a winium Driver service on Windows 10?
我正在使用以下 class 代码通过 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();
}
在 运行 测试 class 作为 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
和options
没有被初始化。因此它抛出空指针异常。
因为testNG
中的执行顺序如下。
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite
一共有三种解法。
更改以下方法的注释,如下所示。这样,启动驱动程序将在设置环境方法之后运行。
@BeforeMethod
public void startDriver(){
driver = new WiniumDriver(service,options);
}
@AfterMethod
public void stopDriver(){
driver.close();
}
更改注释如下。
@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();
}
按如下所示更改注释。我相信,这将是最佳解决方案。
@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();
}
- 下面是正确的使用方法
public class SimpleTest
{
DesktopOptions options;
WiniumDriverService service;
WiniumDriver driver;
@BeforeTest
public void bt()
{
//Instantiate Winium Desktop Options
options = new DesktopOptions();
// Path of application you want to run and test
options.setApplicationPath("C:\Windows\System32\calc.exe");
//Path for Winium Desktop Driver
File driverPath = new File(System.getProperty("user.dir")+File.separator+"drivers"+File.separator+"Winium.Desktop.Driver.exe");
//Port is 9999, you can change it
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();
}
driver = new WiniumDriver(service,options);
}
@AfterTest
public void at()
{
service.stop();
}
}
- 如需其他配置可参考this link. However, I would not recommend that you use Winium for Windows automation even for basic Calculator program it will not work properly, last release of Winium was in 2016, I don't think it is regularly maintained now. Instead use WinAppDriver, which is far better tool and with good documentation. To start with refer this link
我正在使用以下 class 代码通过 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();
}
在 运行 测试 class 作为 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
和options
没有被初始化。因此它抛出空指针异常。
因为testNG
中的执行顺序如下。
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite
一共有三种解法。
更改以下方法的注释,如下所示。这样,启动驱动程序将在设置环境方法之后运行。
@BeforeMethod public void startDriver(){ driver = new WiniumDriver(service,options); } @AfterMethod public void stopDriver(){ driver.close(); }
更改注释如下。
@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(); }
按如下所示更改注释。我相信,这将是最佳解决方案。
@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(); }
- 下面是正确的使用方法
public class SimpleTest
{
DesktopOptions options;
WiniumDriverService service;
WiniumDriver driver;
@BeforeTest
public void bt()
{
//Instantiate Winium Desktop Options
options = new DesktopOptions();
// Path of application you want to run and test
options.setApplicationPath("C:\Windows\System32\calc.exe");
//Path for Winium Desktop Driver
File driverPath = new File(System.getProperty("user.dir")+File.separator+"drivers"+File.separator+"Winium.Desktop.Driver.exe");
//Port is 9999, you can change it
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();
}
driver = new WiniumDriver(service,options);
}
@AfterTest
public void at()
{
service.stop();
}
}
- 如需其他配置可参考this link. However, I would not recommend that you use Winium for Windows automation even for basic Calculator program it will not work properly, last release of Winium was in 2016, I don't think it is regularly maintained now. Instead use WinAppDriver, which is far better tool and with good documentation. To start with refer this link