如何在Windows 10上构建Winium驱动程序服务? [英] How to build a winium Driver service on Windows 10?

查看:141
本文介绍了如何在Windows 10上构建Winium驱动程序服务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下类代码通过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方法之前执行,并且变量serviceoptions未初始化.因此,它将引发空指针异常.

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

有三种解决方案.

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

  1. 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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆