[英]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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.