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();
}
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)
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?
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.
because the order of execution in testNG
is given below.
@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite
There are three solutions.
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();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With