iOS谓词文本不是在查找元素,而是在appium java中使用Xpath

iOS谓词文本不是在查找元素,而是在appium java中使用Xpath,appium,appium-ios,xcuitest,Appium,Appium Ios,Xcuitest,我不熟悉通过appium Java进行iOS自动化测试。我编写这段代码是为了包含谓词文本。出于某种原因,xpath工作正常,但是当我使用谓词文本时,我没有得到这样的元素异常 我使用的是Eclipse、maven appium 1.7.2,我使用的是ioS模拟器 我的appium服务器是最新版本 protected IOSDriver<IOSElement> driver = null; DesiredCapabilities dc = new DesiredCapabilities

我不熟悉通过appium Java进行iOS自动化测试。我编写这段代码是为了包含谓词文本。出于某种原因,xpath工作正常,但是当我使用谓词文本时,我没有得到这样的元素异常

我使用的是Eclipse、maven appium 1.7.2,我使用的是ioS模拟器

我的appium服务器是最新版本

protected IOSDriver<IOSElement> driver = null;

DesiredCapabilities dc = new DesiredCapabilities();

@BeforeMethod
public void setUp() throws MalformedURLException {


    dc.setCapability("deviceName", "iPhone X");
    dc.setCapability("platformName", "iOS");
    dc.setCapability("app", "xxx.app";
    dc.setCapability("platformVersion", "12.2");
    dc.setCapability("automationName", "XCUITest");
    dc.setCapability("useNewWDA", true);
    dc.setCapability("fullReset", false);
    dc.setCapability("appiumVersion", "1.7.2");
    //dc.setCapability("automationName", "XCUITest");
    driver = new iOSDriver<>(new URL("http://localhost:4723/wd/hub"), dc);
    driver.setLogLevel(Level.INFO);
}

@Test
public void testUntitled() throws InterruptedException {


driver.findElement(By.xpath("//XCUIElementTypeButton[@name='Allow']")).click();
        Thread.sleep(10000);
        String selector= "type == 'XCUIElementTypeTextField' AND value == 

'Email'";
driver.findElement(MobileBy.iOSNsPredicateString(selector)).sendKeys("gjghhj");   driver.findElement(By.xpath("//XCUIElementTypeTextField[@value='Email']")).sendKeys("dssss");

}

您的谓词可能不正确。考虑使用<代码>名称>代码>代替<代码>值< /代码>

String selector=“type=='xguielementtypetextfield'和name=='Email'

附言。 不能使用
Thread.sleep()当您不知道确切的等待时间时。尝试此实用程序功能:

public void waitForExistence(final String predicate) {
        for (int attempt = 0; attempt < 10; attempt++) {
            try {
                driver.findElementByIosNsPredicate(predicate);
                break;
            } catch (Exception e) {
                driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
            }
        }
    }
public void waitForExistence(最终字符串谓词){
for(int-trunt=0;trunt<10;trunt++){
试一试{
driver.findelementbyiosspredicate(谓词);
打破
}捕获(例外e){
driver.manage().timeouts().implicitlyWait(1,TimeUnit.SECONDS);
}
}
}
尝试一下类链。()


MobileBy.iOSClassChain(“**/XUIElementTypeTextField[`value=='Email'`]”)如果您使用下面的页面工厂,代码可以正常工作,只需用搜索条件替换“您的文本”

@iOSXCUITFindBy(iOSNsPredicate = "type == 'XCUIElementTypeStaticText' AND name CONTAINS[c] 'Your Text'")
public WebElement myElementUsingiOSNsPredicate;

public void clickOnMyiOSText() 
 {
  myElementUsingiOSNsPredicate.click();   
 }

带谓词字符串的方法在哪里?我只能看到选择器字符串,没有使用它。我也添加了它。谢谢
@iOSXCUITFindBy(iOSNsPredicate = "type == 'XCUIElementTypeStaticText' AND name CONTAINS[c] 'Your Text'")
public WebElement myElementUsingiOSNsPredicate;

public void clickOnMyiOSText() 
 {
  myElementUsingiOSNsPredicate.click();   
 }