序文
私はどのようにより良いページでより高速な位置決めモードのための特定の要素のために、問題が発生します、Appiumの使用で、私たちを信じています。Appiumへ新すべてに基づいてこの記事では、要素の位置がかなり曖昧です。
Appiumターゲティングはセレンに依存しています。だから、セレン、Appiumは、サポートされているメソッドをターゲットにプラスネイティブAndroidとiOSのターゲット。見えるので、選択を使用する方法を、ターゲットにダースが、また、いくつかの贅沢があります。
1. Appium標的種
次のように現在、Appiumは、メソッドをターゲットにサポート:
cssSelector # Selenium 最强大的定位方法,比 xpath 速度快,但比 xpath 难上手
linkText # 链接元素的全部显示文字
partialLinkText # 链接元素的部分显示文字
name # 元素的 name 属性,目前官方在移动端去掉这个定位方式,使用 AccessibilityId 替代
tagName # 元素的标签名 className # 元素的 class 属性 id # 元素的 id 属性 xpath # 比 css 定位方式稍弱一些的定位方法,但胜在容易上手,比较好使用,缺点就是速度慢一些。 AccessibilityId # Appium 中用于替代 name 定位方式 AndroidUIAutomator # Android 测试,最强大速度最快的定位方式 iOSNsPredicateString # iOS 谓词的定位方式,仅支持 XCTest 框架,需大于 iOS 9.3或以上 IosUIAutomation # iOS 谓词的定位方式,仅支持 UIAutomation 框架,需大于 iOS 9.3或以下 iOSClassChain # 国外大神 Mykola Mokhnach 开发类似 xpath 的定位方式,仅支持 XCTest 框架,,不如 xpath 和 iOSNsPredicateString 好 windowsAutomation # windows 应用自动化的定位方式
、上記のような方法をターゲットname
公式の理由は捨てので、ので、ここでは繰り返しません。tagName
、linkText
そしてpartialLinkText
私の理解では、ほとんど使用されないウェブ、モバイル最後のページを使用するのが一般的です。
次に、私はそれがメソッドのApp UIオートメーションを対象に詳細な使用方法について話をするために使用と思います。
1.1クラス名
要素の使用className
属性位置付け、支援を:AndroidとiOS、お勧めします。
MobileBy.className("XCUIElementTypeButton")
1.2 ID
要素の使用resource-id
属性ポジショニング、サポート:アンドロイドは、4.2以上のみのAndroidをサポートしていますが推奨され、一般的には、ID正確な位置決めを使用し、それはIDを使用しますが、位置情報は簡単ですが、間違いを起こしやすいではありません。とにかく、私はiOSの中で使用していない、我々はあなたがそれを共有することができ、例の適切な使用がありました。
MobileBy.id("package.name:id/android")
1.3のXPath
サポート:AndroidとiOS。しかし、iOSの10のために、位置決め速度は非常に遅く、サポートしていませんXCUITestフレームワークのサウンドトラックを使用して開始したので、我々は公式の使用はお勧めしません、他の代替のターゲットの方法を用いることができるがあります。
-
XPathのパスのスクリーンショットに示すように、絶対パスを使用して位置決めします
MobileBy.xpath("className/className/className/className")
-
位置の相対パスを使用します
MobileBy.xpath("//className")
-
要素インデックスを配置することにより、
MobileBy.xpath("//className[index]")
-
位置決め要素の属性によって
MobileBy.xpath("//className[@label='更多信息']") # 使用一种属性定位 MobileBy.xpath("//className[@label='更多信息'][@isVisible='1']") # 使用两种属性定位 MobileBy.xpath("//className[contains(@label,'更多')]") # 使用部分属性定位(最强大)
1.4 AccessibilityId
以前の置き換えname
の測位モードが推奨されます。
Androidでは、使用する主な要素content-desc属性
の属性が空の場合は、このターゲティング方法を使用することはできません。
iOSでは、使用される主な要素label
またはname
属性は、属性が空である場合、それらは、このプロパティを使用することができない、空の場合、配置プロパティ(二つの特性の値は同一です)。
MobileBy.AccessibilityId("更多信息")
1.5 AndroidUIAutomator
唯一のAndroid 4.2以上、支持要素と推奨配置された単一のプロパティ複数の属性をサポートしています。
次の属性位置決め要素をサポートしています。
index(int index)
text(String text)
resourceId(String id)
className(String className)
packageName(String packageName)
description(String desc)
checked(boolean val)
clickable(boolean val)
enabled(boolean val)
longClickable(boolean val)
selected(boolean val)
instance(int val)
# 其他一些详细方法(包括正则表达式匹配),请查看 Android 源码中,UiSelector 类定义的方法
例:
MobileBy.AndroidUIAutomator("new UiSelector().text(\"发送\")") # 使用一种属性定位 MobileBy.AndroidUIAutomator("new UiSelector().text(\"发送\").clickable(true)") # 使用两种属性定位
すべてのプロパティは、位置決め要素、非常に強力な、そして速いとして使用されています。
1.6 iOSNsPredicate
唯一のiOSの10以上、支持要素と推奨配置された単一のプロパティ複数の属性をサポートしています。詳細については、
iOSNsPredicateポジショニングを。
MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeButton'") # 使用一种属性定位
MobileBy.iOSNsPredicateString("type == 'XCUIElementTypeButton' AND label == '更多信息'") # 使用两种属性定位
IOSNsPredicate具体的な文法構造は、公式ドキュメントをチェックアウト、または私のポストの別のものを見ることができます。
1.7 iOSClassChain
偉大な神ミコラMokhnach開発githubのあるiOSの10以上で、かつ唯一のWebDriverAgentの枠組みの中で、代替のXPathに使用をサポートしていますが、しばらく使用した後に、それが必要完璧ではない、ないのXPathの柔軟性とiOSNsPredicateが良い感じていないだけです。具体的な使用は、以下を参照してくださいiOSClassChainを。
MobileBy.iOSClassChain('XCUIElementTypeWindow[1]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeNavigationBar[1]/XCUIElementTypeOther[1]/XCUIElementTypeButton[2]')
1.8 IosUIAutomation
iOSNsPredicate:唯一のiOS 9.3以下であり、古いフレームワークはUIAutomation IOSのターゲットにサポートし、このタイプの標的化は、同様に位置決めIOSの述語、詳細な参照のために使用することができます
MobileBy.IosUIAutomation("type == 'UIAButton'") # 使用一种属性定位
MobileBy.IosUIAutomation("type == 'UIAButton' AND label == '更多信息'") # 使用两种属性定位
2.複雑な位置決め要素
Androidの両親トニー・チャットログインページのバージョンでは、以下に示すように、電話番号とパスワードの入力ボックス情報ボックスに2つの要素を入力します。
プロパティのほとんどが一致している電話番号とパスワードの入力ボックスボックスを入力し、単独のclassNameのIDが実行可能ではない持っています。一部の学生は、デフォルトの入力ボックスのコピー(テキスト属性)がない、頼むかもしれませんか?友達になることができ、テキストの配置属性を使用します。
最初のログイン時に、テキストプロパティを使用することは確かに位置するが、図に示すように、最初の記号は、最後のログインの電話番号を、残りの電話番号入力ボックスは、テキストプロパティは、最後のログインの電話番号になっていない場合。
このような入力ボックスでは、要素のテキスト属性が変化していきます。位置決め要素の間に、我々は見つけることができる限り多くを変更することができますプロパティ値の使用を避けることができます。
このような場合は、我々は多素子の位置決めの属性を使用することができればこのように、電話番号、パスワード入力ボックス基本的に2つのプロパティは、検索に使用することはできません。。ほとんどの図1と一貫性のある、二つの属性要素2で見たが、3つの異なる属性があります:焦点を当て、パスワード、インスタンスが。2つだけの同一の組み合わせの入力ボックス属性値は、このような位置決めは、要素によって求めることができます。
AndroidUIAutomatorポジショニングを使用してください。UiSelectorは、パスワード属性のポジショニングをサポートしていません。
# 手机号码输入框
MobileBy.AndroidUIAutomator("new UiSelector().resourceId(\"com.babychat:id/edit_content\").focused(true)")
MobileBy.AndroidUIAutomator("new UiSelector().className(\"android.widget.EditText\").instance(0)")
# 密码输入框
MobileBy.AndroidUIAutomator("new UiSelector().resourceId(\"com.babychat:id/edit_content\").focused(false)") MobileBy.AndroidUIAutomator("new UiSelector().className(\"android.widget.EditText\").instance(1)")
XPathロケーションを使用して、インスタンス属性の位置の使用をサポートしていません。
# 手机号码输入框
MobileBy.xpath("//android.widget.EditText[@focused='true']")
MobileBy.xpath("//android.widget.EditText[@password='false']")
# 密码输入框
MobileBy.xpath("//android.widget.EditText[@focused='false']") MobileBy.xpath("//android.widget.EditText[@password='true']")
3.まとめ
いくつかは、一般的に、誰もが話しのように上に、Appium要素をターゲットに。限り、あなたは具体的には、使用する要素を見つけることができるようにしたいと、あなたは個人的な習慣を見ています。あなたはより多くのような他の要素とそのプロパティの要素を検索したい場合しかし、あなたは、異なる見つける具体的な使用、あなたが他のプロパティと1つの比較を持っている属性も、3つのプロパティが配置されている2つ以上を、使用する必要がありますプロパティ使用されるタイプのターゲティング特性を、より信頼性のあるようにします。
この記事は感情で得られた私の学習Appiumであるあなたがより良い方法を持っている場合、あなたは私たちが一緒に議論し、一緒に進行することができ、それを言うことができます!
著者:DC_ingの
リンクします。https://www.jianshu.com/p/9f842862f883
出典:ジェーン・ブック
著者によって予約ジェーンブックの著作権、いかなる形で再現され、承認を得るために、作者に連絡して、ソースを明記してください。