我開始自動化一個應用程序(在Android和iOS上)。這個想法是使頁面對象可重用,所以我使用@AndroidFindBy和@iOSFindBy方法來獲取應用程序上的元素。由Appluent上的FluentWait.until引起的「NoSuchMethodError」
我開發了一些應用程序的頁面對象,我開始寫幾個測試。但問題是,每次我必須使用MobileElement時,IntelliJ都會拋出一個NoSuchMethodError。 只有在使用@FindBy方法實例化元素時纔會發生這種情況。例如,如果我在方法內部查找元素的結果,它就可以正常工作。
這不起作用
import io.appium.java_client.MobileDriver;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.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.android.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.android.AndroidElement$$EnhancerByCGLIB$$c0b591f0.click(<generated>)
at com.userzoom.appium.pageobjects.ActivityMain.goToQRScan(ActivityMain.java:57)
at com.userzoom.appium.testcases.android.QR.QR001.QR001(QR001.java:54)
關於maven配置pom,我在版本21有番石榴,在版本3.5.2有硒。
我有困難的時候怎麼看這不同於OP在不起作用的示例中所做的事情? – mrfreester
@mrfreester有多種訪問WebElement的方法。OP正在試圖同時訪問實現多種方式的相同元素。在給定的例子中, – nullpointer
不起作用,我沒有看到'driver.findElement'的任何實例。在這個例子中,我只能看到兩者都起作用,看起來註釋只留在那裏,但沒有被使用,因爲OP使用'driver.findElement'來代替。如果我理解正確,問題是爲什麼在使用註釋版本時發生錯誤,就像在答案中一樣。 – mrfreester