Appium自动化元素定位

1. 通过id定位,id就是我们看到元素属性信息resource-id的值,如下图
Appium自动化元素定位
文章图片

AndroidElement edit_text=driver.findElementById("email_text");

或者
AndroidElement edit_text=driver.findElement(By.id("email_text"));

2. 通过元素className定位,className对应的值就是我们看到的元素属性信息class的值;但要注意的是:可能一个页面有多个相同class的值
Appium自动化元素定位
文章图片

AndroidElement edit_text=driver.findElement(By.className("android.widget.TextView"));

或者:
AndroidElement edit_text=driver.findElementByClassName("android.widget.TextView");


如果此页面有多个相同的class值,使用get()指定要使用那个索引的是:
AndroidElement edit_text=driver.findElements(By.className("android.widget.TextView")).get(1);

或者:
AndroidElement edit_text=driver.findElementsByClassName("android.widget.TextView").get(1);

3. 通过元素的accessibility id定位,accessibility id对应的值就是我们看到的元素属性信息中content-desc
Appium自动化元素定位
文章图片

AndroidElement edit_text=driver.findElementsByAccessibilityId("Unlock");

或者
AndroidElement edit_text=driver.findElement(MobileBy.AccessibilityId("Unlock"));

4. 通过AndroidUiautomator(findElementByAndroidUIAutomator)定位元素,对于这种定位元素的方式实质上是借用的uiautomator这个工具的定位方式来进行的,关于uiautomator本身也是一个安卓的自动化测试工具,下面的例子使用Androiduiautomator的定位方式进行实现:
1)uiautomator工具通过id定位的语句是:
new UiSelector().resourceId(\"com.zhihu.android:id/edit_text\")

那么对于appium要使用这种定位,需要将其作为字符串参数传递给下面的方法
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().resourceId(\"com.zhihu.android:id/edit_text\")")); driver.findElementByAndroidUIAutomator(“new UiSelector().resourceIdMatches(\“regex\”)”);

2)uiautomator工具通过class属性定位的语句是:
new Uiselector().className(“audroid.widget.EditText”);

那么对于appium要使用这种定位,需要将其转换成字符串参数传递给下面的方法
findElement(MobileBy.AndroidUIAutomator("new UiSelector().className(\"android.widget\")")); findElementByAndroidUIAutomator(“new UiSelector().className(\“className\”)”); findElementByAndroidUIAutomator(“new UiSelector().classNameMatches (\“regex\”)”);

3)uiautomator工具通过content-desc属性定位的语句是:
new UiSelector().description(“Unlock”);

那么对于appium要使用这种定位,需要将其转换成字符串传递给下面的方法
AndroidUiautomator edit_text=driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().description(\"Unolck\")"));

4)uiautomator工具通过text属性定位的语句是:
new UiSelector().text(“邮箱”);

那么对于appium要使用这种定位,需要将其作为字符串参数传递给下面的方法
AndroidUiautomator edit_text=driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector.text(\"邮箱\")")); findElementByAndroidUIAutomator(“new UiSelector().text(\“text\”)”) findElementByAndroidUIAutomator(“new UiSelector().textContains (\“text\”)”) findElementByAndroidUIAutomator(“new UiSelector().textMatches (\“regex\”)”) findElementByAndroidUIAutomator(“new UiSelector().textStartsWith(\"登录\")”;

5. 如果选取的定位信息的值在整个界面存在多个时,可以使用driver.findElements方法来定位,如相同的id的元素有多个时,我们要操作第二个,代码如下
List ids=driver.findElements(By.id("title"));

//点击第二个,通过list集合的索引去找定位到多个元素的某一个元素(索引从0开始,所以点击第2个元素的索引是1)
ids.get(1).click();

6、可以指定查找到的第几个,红色部分括号里写上索引即可
driver.findElementByAndroidUIAutomator("new UiSelector().text(\"登录\").instance(1)");

7、滑动到指定文本的元素
driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).getChildByText(new UiSelector().className(\"android.widget.TextView\"), \"你想滑动到的元素字符串 \")");

8、根据元素其他属性进行定位
findElementsByAndroidUIAutomator("new UiSelector().resourceId(\"android:id/checkbox\").checked(false)");

【Appium自动化元素定位】

    推荐阅读