1. 通过id定位,id就是我们看到元素属性信息resource-id的值,如下图
文章图片
AndroidElement edit_text=driver.findElementById("email_text");
或者
AndroidElement edit_text=driver.findElement(By.id("email_text"));
2. 通过元素className定位,className对应的值就是我们看到的元素属性信息class的值;但要注意的是:可能一个页面有多个相同class的值
文章图片
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
文章图片
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自动化元素定位】