我对 Appium 还很陌生。我目前按照一些视频创建 POM Appium android 测试。当我尝试运行测试时,它会抛出此错误:
java.lang.IllegalStateException:元素 By.id: nameText 不再可定位,因为其上下文已被垃圾收集
有关更多信息,我在此处附加了我的页面对象类:
public class LoginPage extends AndroidGestures {
AndroidDriver driver;
public LoginPage(AndroidDriver driver) {
super(driver);
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
@AndroidFindBy(id="com.androidsample.generalstore:id/nameField")
private WebElement nameText;
@AndroidFindBy(id="com.androidsample.generalstore:id/radioMale")
private WebElement genderMale;
@AndroidFindBy(id="com.androidsample.generalstore:id/radioFemale")
private WebElement genderFemale;
@AndroidFindBy(id="com.androidsample.generalstore:id/btnLetsShop")
private WebElement loginButton;
@AndroidFindBy(id="android:id/text1")
private WebElement country;
public void setName(String name) {
nameText.sendKeys(name);
driver.hideKeyboard();
}
public void setGender(String gender) {
if(gender.toLowerCase().equals("female")) {
genderFemale.click();
} else if (gender.toLowerCase().equals("male")) {
genderMale.click();
}
}
public void selectCountry(String cntr) {
country.click();
scrollDownToTextAndClick(cntr);
}
public void login() {
loginButton.click();
}
}
测试班:
public class BasicStore extends BaseClass {
LoginPage lgp = new LoginPage(driver);
@Test (priority = 1, description = "Enter the general store")
public void POM001() {
// filling the form
lgp.setName("Ayumi"); --> I assume this is where things go wrong
lgp.setGender("female");
lgp.selectCountry("Bahamas");
lgp.login();
threadSleep(3);
// assert that we enter the correct page
Boolean page = driver.findElement(AppiumBy.id("com.androidsample.generalstore:id/appbar_btn_cart")).isDisplayed();
Assert.assertTrue(page);
}
}
我尝试过的一些事情:
由于我环顾四周,没有发现任何与此相关的内容(或者我太不耐烦了),所以出现了两个问题:
非常感谢您的时间和答复!
在测试类中,尝试放置 LoginPage lgp = new LoginPage(driver); 在 public void POM001() {} 内,那么它应该可以工作
public class BasicStore extends BaseClass {
@Test (priority = 1, description = "Enter the general store")
public void POM001() {
LoginPage lgp = new LoginPage(driver);
// filling the form
lgp.setName("Ayumi"); --> I assume this is where things go wrong
lgp.setGender("female");
lgp.selectCountry("Bahamas");
lgp.login();
threadSleep(3);
// assert that we enter the correct page
Boolean page = driver.findElement(AppiumBy.id("com.androidsample.generalstore:id/appbar_btn_cart")).isDisplayed();
Assert.assertTrue(page);
}
}