Причина в том, что ваша строка xpath очень длинная. Это имеет тенденцию замедлять Appium, поскольку в вашем случае он должен пройти длинный путь. Это очень хрупкая и плохая идея, чтобы поставить абсолютный xpath тоже.
Есть несколько способов получить элемент
имя класса
идентификатор
имя
xpath
идентификатор доступа
строка предиката ios
цепочка классов ios
Обратитесь к вашему инспектору (пример Appium Inspector) на элементе.
Если есть доступный идентификатор, код должен быть
WebElement el = driver.findElement(MobileBy.AccessibilityID("foo"));
Имя класса
Имя класса должно быть вторым в строке. Это эффективно, особенно если есть только 1 уникальное имя класса - например, в форме есть только 1 кнопка
List<MobileElement> elementsTwo = (List<MobileElement>) driver.findElementsByClassName("XCUIElementTypeButton");
Стратегии локатора для iOS *
Вы можете попробовать iOSClassChain. Это следующий эффективный селектор. Пример
String selector = "**/XCUIElementTypeCell[`name BEGINSWITH "C"`]/XCUIElementTypeButton[10]";<br>
driver.findElement(MobileBy.iOSClassChain(selector));
Или вы можете попробовать использовать селектор предикатов.
driver.findElementsByIosNsPredicate("isWDVisible == 1");
Наконец, если все эти опции заканчиваются, вы должны использовать xpath в качестве последнего средства. Избегайте абсолютного xpath и используйте относительный xpath.
Абсолютный xpath
String El1="//XCUIElementTypeApplication[@name='appName']/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeTable/XCUIElementTypeCell[5]/XCUIElementTypeStaticText";
Относительный xpath
String El1 = “//XCUIElementTypeTable[name=‘Customer’]/XCUIElementTypeCell[5]/XCUIElementTypeStaticText”