FluentWait导致的java“NoSuchMethodError”。直到阿皮姆
我开始自动化一个应用程序(在Android和iOS上)。其想法是使页面对象可重用,因此我使用@AndroidFindBy和@iOSFindBy方法来获取应用程序上的元素
我已经为这个应用开发了一些页面对象,并开始编写一些测试。但问题是,每次我必须使用MobileElement时,IntelliJ都会给我一个错误。 只有在使用@FindBy方法实例化和非实例化元素时,才会发生这种情况。例如,如果我对方法内部元素的查找进行硬编码,它就会正常工作
这不起作用
import io.appium.java_client.MobileDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.安卓.AndroidElement;
import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
import io.appium.java_client.pagefactory.SelendroidFindBy;
import io.appium.java_client.pagefactory.iOSFindBy;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ActivityMain {
private final MobileDriver driver;
private WebDriverWait wait;
//@iOSFindBy(id = "")
@SelendroidFindBy(id = "com.testapp.uzapp:id/qrButton")
public MobileElement qrButton;
public ActivityMain(MobileDriver driver) {
this.driver = driver;
wait = new WebDriverWait(driver, 30);
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public ActivityQRScan goToQRScan() {
qrButton.click();
return new ActivityQRScan(this.driver);
}
}
但是
这很好用
package com.userzoom.appium.pageobjects;
import io.appium.java_client.MobileDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.安卓.AndroidElement;
import io.appium.java_client.pagefactory.AndroidFindBy;
import io.appium.java_client.pagefactory.AppiumFieldDecorator;
import io.appium.java_client.pagefactory.SelendroidFindBy;
import io.appium.java_client.pagefactory.iOSFindBy;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ActivityMain {
private final MobileDriver driver;
private WebDriverWait wait;
//@iOSFindBy(id = "")
@SelendroidFindBy(id = "com.testapp.uzapp:id/qrButton")
public MobileElement qrButton;
public ActivityMain(MobileDriver driver) {
this.driver = driver;
wait = new WebDriverWait(driver, 30);
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public ActivityQRScan goToQRScan() {
driver.findElement(By.id("com.userzoom.uzapp:id/qrButton")).click();
/* This Works too
WebElement qrButton = driver.findElement(By.id("com.userzoom.uzapp:id/qrButton"));*/
return new ActivityQRScan(this.driver);
}
}
给我的错误是:
java.lang.NoSuchMethodError: org.openqa.selenium.support.ui.FluentWait.until(Lcom/google/common/base/Function;)Ljava/lang/Object;
at io.appium.java_client.pagefactory.AppiumElementLocator.waitFor(AppiumElementLocator.java:88)
at io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:103)
at io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept(InterceptorOfASingleElement.java:57)
at io.appium.java_client.安卓.AndroidElement$$EnhancerByCGLIB$$c0b591f0.click(<generated>)
at com.userzoom.appium.pageobjects.ActivityMain.goToQRScan(ActivityMain.java:57)
at com.userzoom.appium.testcases.安卓.QR.QR001.QR001(QR001.java:54)
在maven配置pom上,我有21版的番石榴和3.5.2版的selenium
# 1 楼答案
将pom上的selenium server版本更改为3.0.1后随机解决。。。 3.5.2甚至对明显存在的元素给出了NullPointerException