1.UiSelector 是uiautomator自动化测试中用来查找元素的对象,Appium支持使用UiSelector 选取对象,但是常见的写法是手写字符串比如"new UiSelector().text()",此类写法严重影响开发效率,所以针对此类问题,对UiSelector 进行了封装
2.源码
package com.automated.testing.common.utils.appium;
public interface ZLYUiCollection {
String builder();
}
package com.automated.testing.common.utils.appium;
public interface ZLYUiSelector extends ZLYUiCollection {
ZLYUiSelector text(String text);
ZLYUiSelector textContains(String text);
ZLYUiSelector textStartsWith(String textStartsWith);
ZLYUiSelector textMatches(String textMatches);
ZLYUiSelector description(String description);
ZLYUiSelector className(String className);
ZLYUiSelector resourceId(String resourceId);
ZLYUiSelector classNameMatches(String regex);
ZLYUiSelector descriptionMatches(String regex);
ZLYUiSelector descriptionStartsWith(String desc);
ZLYUiSelector descriptionContains(String desc);
ZLYUiSelector resourceIdMatches(String regex);
ZLYUiSelector index(int index);
ZLYUiSelector instance(int instance);
ZLYUiSelector enabled(boolean val);
ZLYUiSelector focused(boolean val);
ZLYUiSelector focusable(boolean val);
ZLYUiSelector scrollable(boolean val);
ZLYUiSelector selected(boolean val);
ZLYUiSelector checked(boolean val);
ZLYUiSelector clickable(boolean val);
ZLYUiSelector checkable(boolean val);
ZLYUiSelector longClickable(boolean val);
ZLYUiSelector packageName(String name);
ZLYUiSelector packageNameMatches(String regex);
}
package com.automated.testing.common.utils.appium;
public class ZLYUiSelectorImpl implements ZLYUiSelector {
private final StringBuilder selectorBuilder;
public ZLYUiSelectorImpl() {
this.selectorBuilder = new StringBuilder("new UiSelector()");
}
public ZLYUiSelectorImpl(String presetConditions) {
this.selectorBuilder = new StringBuilder(presetConditions);
}
@Override
public ZLYUiSelector text(String text) {
return builder("text", text);
}
private ZLYUiSelector builder(String text, Object desc) {
this.selectorBuilder.append(".");
this.selectorBuilder.append(text);
this.selectorBuilder.append("(\"");
this.selectorBuilder.append(desc);
this.selectorBuilder.append("\")");
return this;
}
public String builder() {
return this.selectorBuilder.toString();
}
@Override
public ZLYUiSelector textContains(String text) {
return builder("textContains", text);
}
@Override
public ZLYUiSelector textStartsWith(String textStartsWith) {
return builder("textStartsWith", textStartsWith);
}
/**
* 正则匹配textMatches
*
* @param textMatches 正则表达式
* @return
*/
@Override
public ZLYUiSelector textMatches(String textMatches) {
return builder("textMatches", textMatches);
}
@Override
public ZLYUiSelector description(String description) {
return builder("description", description);
}
@Override
public ZLYUiSelector className(String className) {
return builder("className", className);
}
@Override
public ZLYUiSelector resourceId(String resourceId) {
return builder("resourceId", resourceId);
}
@Override
public ZLYUiSelector classNameMatches(String regex) {
return builder("classNameMatches", regex);
}
@Override
public ZLYUiSelector descriptionMatches(String regex) {
return builder("descriptionMatches", regex);
}
@Override
public ZLYUiSelector descriptionStartsWith(String desc) {
return builder("descriptionStartsWith", desc);
}
@Override
public ZLYUiSelector descriptionContains(String desc) {
return builder("descriptionContains", desc);
}
@Override
public ZLYUiSelector resourceIdMatches(String regex) {
return builder("resourceIdMatches", regex);
}
@Override
public ZLYUiSelector index(int index) {
return builder("index", index);
}
@Override
public ZLYUiSelector instance(int instance) {
return builder("instance", instance);
}
@Override
public ZLYUiSelector enabled(boolean val) {
return builder("enabled", val);
}
@Override
public ZLYUiSelector focused(boolean val) {
return builder("focused", val);
}
@Override
public ZLYUiSelector focusable(boolean val) {
return builder("focusable", val);
}
@Override
public ZLYUiSelector scrollable(boolean val) {
return builder("scrollable", val);
}
@Override
public ZLYUiSelector selected(boolean val) {
return builder("selected", val);
}
@Override
public ZLYUiSelector checked(boolean val) {
return builder("checked", val);
}
@Override
public ZLYUiSelector clickable(boolean val) {
return builder("clickable", val);
}
@Override
public ZLYUiSelector checkable(boolean val) {
return builder("checkable", val);
}
@Override
public ZLYUiSelector longClickable(boolean val) {
return builder("longClickable", val);
}
@Override
public ZLYUiSelector packageName(String name) {
return builder("packageName", name);
}
@Override
public ZLYUiSelector packageNameMatches(String regex) {
return builder("packageNameMatches", regex);
}
@Override
public String toString() {
return this.builder();
}
}
3.使用
/**
* 检查修改昵称
*/
@Test(priority = 4, dependsOnMethods = "checkNoPhone")
protected void checkNoPhoneUpdateName() {
AppiumElementUtils.findWEMListText(this.getCAVView(), "昵称").click();
this.driver.findElementByAndroidUIAutomator(new ZLYUiSelectorImpl().text("游客状态不能修改昵称").checked(false).builder());
this.sleep();
this.checkPersonalCenter();
}
使用起来非常方便,不在需要手写字符串了