JavaもSeleniumも英語もわからないけどとにかくwindows application driver使いたいシリーズ
前回、cmd.exeのセッション作れないー!ってなってたんですが、何かのissueからたどり着いた↓の記事のようにしたら出来ました。
WinAppDriver/README.md at v1.0-RC2 · Microsoft/WinAppDriver · GitHub
- デスクトップのセッションを作る
- デスクトップのセッションから起動したいアプリを起動する
- 起動したアプリの
NativeWindowHandle
を取得して16進数にする(←?) setCapability("appTopLevelWindow", /* 3の値 */);
してセッションを作る
@BeforeClass public static void setup() throws Exception { // デスクトップセッションを作る DesiredCapabilities appCapabilities = new DesiredCapabilities(); appCapabilities.setCapability("app","Root"); DesktopSession = new WindowsDriver<WebElement>(new URL("http://127.0.0.1:4723"), appCapabilities); DesktopSession.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // コマンドプロンプトを起動する DesktopSession.findElementByAccessibilityId("{********}\\cmd.exe").click(); // 起動しているコマンドプロンプトのハンドルを取得して... WebElement cmdWindow = DesktopSession.findElementByClassName("ConsoleWindowClass"); String cmdTopLevelWindowHandle = cmdWindow.getAttribute("NativeWindowHandle"); cmdTopLevelWindowHandle = "0x" + Integer.toHexString(Integer.parseInt(cmdTopLevelWindowHandle)); // 起動しているコマンドプロンプトのセッションを作る DesiredCapabilities cmdAppCapabilities = new DesiredCapabilities(); cmdAppCapabilities.setCapability("appTopLevelWindow", cmdTopLevelWindowHandle); CmdSession = new WindowsDriver<WindowsElement>(new URL("http://127.0.0.1:4723"), cmdAppCapabilities); CmdSession.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); }
タスクバーにコマンドプロンプトをピン留めしてそこをクリックして起動してます。
サンプルがJavaじゃない(?)みたいでそのままだと動かなかったのでいろいろ書き換えた結果コレで出来ました。
0x1234みたいなやつ全然意味わからないけどうまくいくからそのままにしてる…。
@AfterClassでセッションを閉じる前にコマンドプロンプトにexit
+Returnを送って画面閉じてます。