如何在Windows 10上构建Winium驱动程序服务? [英] How to build a winium Driver service on Windows 10?
问题描述
我正在使用以下类代码通过WiniumDriver启动计算器.在创建WiniumDriver实例之前,我要启动Winium驱动程序服务.
I am using the following class code for launching calculator via WiniumDriver. Before creating an instance of WiniumDriver, I am starting a winium driver service.
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项目运行后,观察到以下异常.
After running the test class as TestNG item, following exception is observed.
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?
I double checked the path to calc.exe and Winium.Desktop.Driver.exe, still I am not able to launch the WiniumDriverService. Is there any other way to start this service? Does winium support windows 10?
推荐答案
此处的问题是'startDriver'
在setupEnvironment
方法之前执行,并且变量service
和options
未初始化.因此,它将引发空指针异常.
The problem here is that, 'startDriver'
is executing before setupEnvironment
method and the variables service
and options
are not initialized. Hence it is throwing null pointer exception.
因为下面给出了testNG
中的执行顺序.
because the order of execution in testNG
is given below.
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite
有三种解决方案.
-
为以下方法更改注释,如下所示.这样,启动驱动程序将在设置环境方法之后运行.
change the annotation for the following methods as given below. so that, the start driver will run after the setup environment method.
@BeforeMethod
public void startDriver(){
driver = new WiniumDriver(service,options);
}
@AfterMethod
public void stopDriver(){
driver.close();
}
按如下所示更改注释.
change the annotations as given below.
@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();
}
按如下所示更改注释.我相信,这将是最佳解决方案.
change the annotations as given below. I believe, this one will be optimal solution.
@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();
}
这篇关于如何在Windows 10上构建Winium驱动程序服务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!