Appiumフレームワークを使用してAndroidアプリケーションをテストしています。ビューのIDがないAndroid画面があります(そして、したくない)追加...)、Xpathを使用することを考えました。
これは、UI Automator Viewerでの画面の外観です。
すべての相対的なレイアウトを取得したい(赤でマークされている-16項目)
私は以下を試しました:
List<WebElement> webElementslist =
mAppDriver.findElementsByXPath("//Android.widget.LinearLayout[1]/Android.widget.FrameLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.ViewAnimator[1]/Android.widget.FrameLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.ScrollView[1]/Android.widget.LinearLayout[1]/Android.widget.LinearLayout[1]/Android.widget.LinearLayout[2]");
しかし、私は何のアイテムも手に入れませんでした。
Webを検索して、次のxpathチュートリアルを見つけ、さらに多くのオプションを試しましたが、やはり成功しませんでした。
http://www.zvon.org/comp/r/tut-XPath_1.html#intro
助けていただければ幸いです。
現在、XPathにはAndroidで、表示されている動作を説明する厄介なバグがいくつかあります。これらは 1.3.1リリース で修正される予定です。
理想的には、16個すべてのRelativeLayout
sの_Android.widget.LinearLayout
_親のリソースIDを探して、次のようにすることができます。
_//Android.widget.LinearLayout[@resource-id="foo"]/Android.widget.RelativeLayout
_
レイアウトの1つに_[2]
_の位置を指定したため、詳細なソリューションは機能しませんでした。
これが修正されました:
_//Android.widget.LinearLayout[1]/Android.widget.FrameLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.ViewAnimator[1]/Android.widget.FrameLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.RelativeLayout[1]/Android.widget.ScrollView[1]/Android.widget.LinearLayout[1]/Android.widget.LinearLayout[1]/Android.widget.LinearLayout/Android.widget.RelativeLayout
_
....最初の解決策を使用してください。
UiAutomator
ロケーター戦略を使用して問題の解決策を検討していますが、まだ回答がありません(.fromChild()
と.fromParent()
が壊れているように見えるため)
これを試してみてくださいuは簡単にアクセスできます
driver.findElement(By.xpath("//*[@class='Android.widget.FrameLayout' and @bounds='[418,564][780,885]']")).click();
//foo[1]
が(fooノードの最初の子ではなく)親の最初の子であるすべてのfooノードを返すという事実を念頭に置いて、次のようなことを試してください。
//ScrollView/LinearLayout/LinearLayout[2]/LinearLayout/RelativeLayout
テストされていませんが、ScrollViewの子であるLinearLayoutの2番目の子であるLinearLayoutの子であるLinearLayoutの子であるすべてのRelativeLayoutを提供する必要があります。
完璧に機能する
By.xpath( "// [@ id = 'id1']/follow-sibling :: [@ id = 'id2']"));
次のコードは私のために働いた:
WebElement webElement = driver.findElementByXPath("//Android.widget.ListView[1]/Android.widget.LinearLayout[1]");