web-dev-qa-db-ja.com

Windows 10でwiniumドライバーサービスを構築するにはどうすればよいですか?

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();
    }

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はWindows10をサポートしていますか?

6
Manmohan_singh

ここでの問題は、'startDriver'setupEnvironmentメソッドの前に実行されており、変数serviceoptionsは初期化されていません。したがって、nullポインタ例外をスローしています。

testNGでの実行順序は以下のとおりです。

@BeforeSuite
@BeforeTest
@BeforeClass
@BeforeMethod
@Test
@AfterMethod
@AfterClass
@AfterTest
@AfterSuite

3つの解決策があります。

  1. 以下のメソッドのアノテーションを以下のように変更します。そのため、起動ドライバーはセットアップ環境メソッドの後に実行されます。

     @BeforeMethod
     public void startDriver(){
        driver = new WiniumDriver(service,options);
     }
    
    @AfterMethod
    public void stopDriver(){
       driver.close();
    }
    
  2. 以下のように注釈を変更します。

    @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();
    }
    
  3. 以下のように注釈を変更します。これが最適な解決策になると思います。

    @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();
    }
    
7
Murthi