[WebKit] WebDriver Commands/Inspector commands

Appium Safari remote debugger communicates with Safari via inspector by WebKit. I’d have liked to catch up with WebDriver and relevant automation stuff. Let me leave a note for me as a pointer for them here. WebDriver https://github.com/WebKit/webkit/tree/master/Source/WebDriver Commands https://github.com/WebKit/webkit/blob/master/Source/WebDriver/WebDriverService.cpp Inspector protocol https://github.com/WebKit/webkit/tree/master/Source/JavaScriptCore/inspector/protocol BTW, the WebKit repository has a tool for testing, based on WebDriver…More

[Appium] Send CDP commands to chrome over Appium

I’ve added a route to send CDP command to Chromedriver. CDP stands for Chrome Devtools Protocol. It provides commands to handle a browser via the protocol. Some commands can be alternatives to WebDriver spec, but they have their own more useful commands. It is available over WebSocket. You can find CDP clients in the internet,…More

[WebDriver]innerWidth/innerHeight and outerWidth/outerHeight in WebDriver

“x“: WindowProxy’s screenX attribute. “y“: WindowProxy’s screenY attribute. “width“: WindowProxy’s outerWidth attribute. “height“: WindowProxy’s outerHeight attribute. https://www.w3.org/TR/webdriver/#resizing-and-positioning-windows The Get Window Rect command returns the size and position on the screen of the operating system window corresponding to the current top-level browsing context. https://www.w3.org/TR/webdriver/#get-window-rect Interesting. The get window rect command returns outer stuff. The actual screenshot size is the inner one like:More

[iOS]Xcode 11.4 new interesting features for automation

This article is a note for me in Xcode 11.4 https://developer.apple.com/documentation/xcode_release_notes/xcode_11_4_beta_release_notes/ Simulate push notification xcrun simctl push com.example.my-app ExamplePush.apns Like Android’s adb command, finally, we can simulate push notification on the local!! The local execution helped me so much when I achieved automation. Handle privacy permissions xcrun simctl privacy grant photos com.example.app, xcrun simctl privacy…More

“iOSテスト全書”を書きました

書籍を書きました。 iOSテスト全書 著者: 松尾 和昭,細沼 祐介,田中 賢治,平田 敏之,玉城 信悟, 製本版,電子版 PEAKSで購入する PEAKSから発売されている今までの書籍も拝見していますが、いずれもよくできていること、周りの期待感も高いこともあり、はじめに企画への参画を打診された時にどうしようかと悩んだことを覚えています。 iOSに対するわたしの持ち札はiOS全般のテストツールや、経験を含めた深さでいうとUIテストに関わる範囲です。あと、ソフトウェアテストや品質に関わる専門性のところでした。Appiumというネイティブアプリを主な対象としたOSSの自動化ツール開発も行っているので、テストツール側の挙動に対する知見なども持っていました。 結果、蓋をあけると1章と8章を書きました。そのほかの章は、主には概念的な話やツール、XCUITest付近でいうとちょっと突っ込んだところまで執筆時にレビューに参加したりしていました。8章では、XCUITestの内部挙動のような話にも踏み込もうと思ったのですが、文量や初学者という対象読者を考えるとXCTestツール近辺の知見を最低限要求する事になるので、発展的な内容に繋がるような言及は止めました。(例えばこんな付近の話) 個人的な想いとしては、ツールの使い方よりも基礎となる話をしるきっかけになって欲しいと思っていたので、1章も長くならないようにしつつも、ある程度話が飛ばされる方面の内容を文章に組み込んでみました。”人は間違える”という話や自動化に進んでいく話とかですね。同様の内容は数年前に社内ブログで書いたことがあるのですが、全般的に反応がよかったためです。”テスト技法”などに踏み込むときも、書籍などから辿ることもできるように。ここら辺はAndroidテスト全書にはない内容も含まれるので、Androidテスト全書購入者でも楽しむことができるかと思います。 ちなみに、他の章でもXCTest、XCTest(UI)などの話やそれらを使ったいくつかのテストコードの書き方、CI/CD環境の構築話もあります。iOSのテストに関わる入門書という位置づけでも、ツールの話だけではなく考え方も散りばめられているのでお勧めできる内容かなと思っています。 それでは、Happy Testing 🙂More

[iOS][safaridriver] man safaridriver

man safaridriver provides us what feature we can get by the command. Below is a note what capabilities are available for us. (Please ensure what capabilities etc are available on your target platform before using them.) My environment was macOS 10.14.6. Session Creation browserName, browserVersion, platformName, safari:platformVersion, safari:platformBuildVersion, safari:useSimulator, safari:deviceType, safari:deviceName, safari:deviceUDID Other safari:automaticInspection, safari:automaticProfiling,…More

Appium/XCTest(UI)の実行性能差

この記事は「Selenium/Appium Advent Calendar 2019」1日目の記事です。今回は、Appiumの開発をしている中で問題の報告が多かったXcode 11、iOS 13における実行性能の劣化問題を調べていた時に知ったことです。内容はこのissueの一部です。 Appiumの実行形態とその実行性能 Appiumは基本的には中間サーバとしてテストケースとテスト対象の操作を仲介します。 ある利用者がテストケースを特定の開発言語なりで記述、実行するとします。そのテストケース実行系の中でAppiumサーバに対してHTTPリクエストを送出し、リクエストを受け取ったAppiumサーバーは自身が管理する実行端末上で動作するサーバーに対して操作を要求したり、自身で端末を直接操作します。その操作結果をテストケース実行系に対して返信します。この一連の流れが1つのセットとなり、Appiumのもつ個々の操作が行われます。 つまり、1つのAppiumのコマンド実行時間には、HTTP通信の往復時間が必ずオーバーヘッドとして存在することになります。実行系全体が同一端末に存在する場合、その時間はごく僅かであることが多いです。一方、物理的に異なる環境でテストケースの実行元と実行環境が離れている場合、そのHTTPリクエストにかかる時間は秒単位で大きくなる可能性もあります。(AppiumProにある例) iOSの実行系とXcode 11の変化 現在、AppiumにおけるiOSのテストとしてXCUITest Driverと表現する実行系があります。Appiumは中間サーバとして機能すると先ほど述べました。つまり、Appium自体はその実行端末を操作する側の実装があれば、様々な端末を対象に同様のコマンド実行を実現できます。iOSではXCUITest Driverが、AndroidではUIAutomator2やEspresso Driver、WindowではWinAppDriverなど存在します。 この中で、今回の話題の対象はXCUITest Driverです。この仕組みとして、WebDriverAgentと呼ぶAppleが提供するXCTest(UI)や周辺APIをラップする、iOS端末上で動作するサーバがあります。AppiumサーバはこのWebDriverAgentと独自のiOS端末との直接操作する手段を介してテスト対象となるアプリなどを操作します。 WebDriverAgentはXcode 9の頃から同様の機能を実現していました。Xcodeも11となり、XCTestが提供するUIテストむけ機能も安定、拡充してきました。古いXCTest(UI)などが提供するプライベートAPIもDeprecatedになり、Xcode 11ではXCTest(UI)が内部で利用しているであろうメソッドを利用することにしました。 Xcode 11とiOS 13環境下ではiOS 12環境では問題ない操作が遅くなるなどの報告が出るようになりました。この問題が性能計測の発端です。目的としては、Appiumが利用しているメソッドが問題なのか、XCTest(UI)自体がXcode 11とiOS 13環境において問題を抱えているかでした。 AppiumとXCTest(UI)との実行差分 原理的には、XCUITest DriverとXCTest(UI)は、実際にアプリを操作するためのメソッドは同一です(であるはず)。となると、その実行時間の差分は、AppiumがHTTPリクエストを介するぶんだけ遅延することが常であるはずです。 先に計測結果だけ述べます。 Xcode 11環境下において、iOS 13を対象にするとほぼ期待通りの結果であるいっぽう、iOS 12を対象とするとAppiumの方が高速であることがわかりました。少し前に記述した「Xcode 11ではXCTest(UI)が内部で利用しているであろうメソッドを利用することにしました。」と説明した箇所のメソッドの利用は、内部的には、selectorと呼ばれるあるメソッドが存在するとそれを利用するというロジックを利用しています。そのメソッドは実際にはXcode 9以降に存在するものであるため、実質的にはAppiumはiOS 12、13問わずそのメソッドを利用します。iOS 13の実行性能がAppiumとXCTest(UI)では大差ないこと、XTest(UI)はiOS 12と13では実行性能はほぼ同一なので、XCTest(UI)はiOS 12、13に関わらず同一のメソッドを経由して要素検索などを実行している可能性が高いです。 と考えると、AppiumのiOS 12以下に対する操作がiOS 13はもとより、XCTest(UI)より高速であることは驚きです。内部実装の詳細は知るすべがないのでこれ以上の言及はできませんが、iOS 13は実行性能がiOS 12よりは劣化している面はありつつも、AppiumのHTTPリクエストを除く実行遅延はXCTest(UI)とほぼ同様であることがわかります。Appiumが遅かった場合、XCTest(UI)でも遅い可能性があり、Appleさんの改善に期待したいところで。 計測値 ともあれ、行なった計測を提示します。 テスト対象 テスト対象は、新規作成したプロジェクトにButton要素を付与しただけのアプリです。至極単純なアプリです。 Appium 1.16-beta Xcode 11.2.1 Swift…More