我已经设置了我的 AppiumDriver 自动化类并尝试了简单的测试,例如测试并行、识别 MobileElements 和一般的滑动命令正在工作。通过扭结工作,我收到一条错误消息,指出我将 MobileElement 初始化为网页类的一部分,例如 Chrome 浏览器上的 Google 主页。即使我选择的 id 下面的 className 是正确的,我也没有得到这样的元素。在我的 Appium Server 中,它试图通过 className (android.widget.EditText) 进行查找,但找不到。我试过那个类和“.//android.widget.EditText”,但没有运气。
我会使用按名称搜索,但它没有给我很多选择。我什至尝试做一个 WebElements 列表,但它的大小不大于零。
这是我的页面对象类:
页面对象:
public class PageObject {
public AppiumDriver<MobileElement> driver;
protected WebDriverWait wait;
Dimension size;
public PageObject(AppiumDriver<MobileElement> driver){
this.driver = driver;
wait = new WebDriverWait(driver, 15);
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
@SuppressWarnings("rawtypes")
public void swipeVertical (double startPercentage, double finalPercentage, int duration) {
size = driver.manage().window().getSize();
int width = (int) (size.width/2);
int startPoint = (int) (size.getHeight() * startPercentage);
int endPoint = (int) (size.getHeight() * finalPercentage);
new TouchAction(driver)
.press(PointOption.point(width, startPoint))
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(duration)))
.moveTo(PointOption.point(width, endPoint))
.release()
.perform();
}
@SuppressWarnings("rawtypes")
public void swipeHorizontal (double startPercentage, double finalPercentage, int duration) {
size = driver.manage().window().getSize();
int height = (int) (size.height/2);
int startPoint = (int) (size.getWidth() * startPercentage);
int endPoint = (int) (size.getWidth() * finalPercentage);
new TouchAction(driver)
.press(PointOption.point(startPoint, height))
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(duration)))
.moveTo(PointOption.point(endPoint, height))
.release()
.perform();
}
(更新,这次不使用 PageFactory 方法):GoogleMainPage:
public class GoogleMainPage extends PageObject {
//@AndroidFindBy(id="com.android.chrome:id/tsf")
private MobileElement searchSection = driver.findElement(By.id("main"));
//@AndroidFindBy(id="com.android.chrome:id/tophf")
//private MobileElement searchCategories;
public GoogleMainPage(AppiumDriver<MobileElement> driver) {
super(driver);
}
public void searchQuery(String query) {
MobileElement searchText = searchSection.findElement(By.className(".//android.widget.EditText"));
MobileElement confirmSearch = searchSection.findElement(By.name("Google Search"));
searchText.click();
searchText.sendKeys(query);
confirmSearch.click();
}
}
在设置驱动程序/驱动程序后,我正在执行测试的类(generalWait() 只是一个线程睡眠方法):
@Test
public void testActivation() {
assertTrue(driver != null);
pageObject = new PageObject(TLDriverFactory.getTLDriver());
pageObject.driver.get("https://www.google.com");
System.out.println(pageObject.driver.getCurrentUrl());
assertTrue(pageObject.driver.getCurrentUrl().equals("https://www.google.com/"));
try {generalWait(8000);} catch (InterruptedException e) {e.printStackTrace();}
GoogleMainPage googleMainPage = new GoogleMainPage(TLDriverFactory.getTLDriver());
googleMainPage.searchQuery("star wars");
GoogleSearchResultsPage resultsPage = new GoogleSearchResultsPage(TLDriverFactory.getTLDriver());
resultsPage.swipeVertical(0.20, 0.80, 2000);
}
我目前正在使用 Maven 运行它,io.appium java 客户端是 6.1.0。
设置时我缺少什么吗?如果您需要更多信息,请告诉我。