我正在尝试使用appium自动化android联系人创建。我尝试使用具有两个页面的页面对象模型:
我为两个页面创建了两个页面对象:
public class ContactAccoutChooser {
@AndroidFindBy(uiAutomator = "new UiSelector().text(\"CardDAV\").className(\"android.widget.TextView\")")
public AndroidElement cardav;
AndroidDriver driver;
public ContactAccoutChooser(AndroidDriver driver)
{
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(10)), this);
}
}
public class CreatContact {
AndroidDriver driver;
@AndroidFindBy(uiAutomator = "new UiSelector().text(\"Name\")")
public AndroidElement name;
@AndroidFindBy(uiAutomator = "new UiSelector().text(\"Phone\")")
public AndroidElement phone;
@AndroidFindBy(uiAutomator = "new UiSelector().text(\"Email\")")
public AndroidElement email;
@AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android.contacts:id/menu_save\")")
public AndroidElement saveContact;
public CreatContact(AndroidDriver driver)
{
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver, Duration.ofSeconds(10)), this);
}
public void SaveContact()
{
this.saveContact.click();
}
public void setName(String name) {
this.name.click();
this.name.sendKeys(name);
}
}
当我尝试使用它们时,我可以通过单击cardav来浏览第一页,但是在第二页上,我无法单击所提交的名称,我遇到了例外:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","Android");
capabilities.setCapability("platformVersion","7.0");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("unicodeKeyboard", "true");
capabilities.setCapability("resetKeyboard", "true");
capabilities.setCapability("appPackage","com.android.contacts");
capabilities.setCapability("appActivity","com.android.contacts.activities.PeopleActivity");
driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"),capabilities);
driver.findElement(By.id("com.android.contacts:id/floating_action_button")).click();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
ContactAccoutChooser chooseAccount = new ContactAccoutChooser(driver);
chooseAccount.cardav.click();
CreatContact createContact = new CreatContact(driver);
createContact.setName("danny");
g.openqa.selenium.NoSuchElementException: Can't locate an element by this strategy: By.chained({By.AndroidUIAutomator: new UiSelector().text("Name")})