Sendkeys не работают в реальном устройстве iOS с помощью Appium - PullRequest
0 голосов
/ 30 января 2019

Я использую appium (v1.10.0) для автоматизации нативного приложения iOS на macOS (10.13.6) с использованием Xcode 10.1 на реальном устройстве (iPhone 6s) платформы версии 12.1.3.Когда я запускаю appium server и запускаю сессию, приложение откроется на устройстве.Как только я запускаю код в eclipse для отправки имени пользователя на страницу входа в приложение, мобильная клавиатура не открывается и, следовательно, sendkeys () не работает.

Пробовал getKeyboard () перед sendkeys ().Тем не менее ошибка существует.Ниже приведен код, который я попробовал.

DesiredCapabilities cap = new DesiredCapabilities();

    cap.setCapability("device", "iPhone");

    cap.setCapability("deviceName", "iPhone 6s");

    cap.setCapability("platformVersion", "12.1.3");

    cap.setCapability("platformName", "iOS");


    cap.setCapability("app","/Users/TP/Desktop/SampleApp.ipa" );

    cap.setCapability("udid", "xxxxxxxxxxxxxxxxxxx");

    cap.setCapability("automationName", "XCUITest");

    cap.setCapability("xcodeOrgId", "xxxxxxxx");

    cap.setCapability("xcodeSigningId", "xxxxxxxx");

    driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap);

    driver.findElement(By.xpath("//XCUIElementTypeApplication[@name=\"TBI\"]")).click();

    driver.getKeyboard().sendKeys("abc");

Мобильная клавиатура не открывается и, следовательно, выдает следующую ошибку.

org.openqa.selenium.WebDriverException: неизвестная ошибка на стороне сервера при обработке команды.

Исходная ошибка: Ошибка Domain = com.facebook.WebDriverAgent Code = 1 "Поддерживаются только действия типа« указатель ». Вместо действия указывается« ключ »для действия с идентификатором« клавиатура »« UserInfo = {NSLocalizedDescription =Поддерживаются только действия типа указателя.вместо действия указывается «ключ» с идентификатором «клавиатура»}

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Send Keys отправляет последовательность нажатий клавиш на элемент.Можете ли вы заменить следующие две строки

driver.findElement(By.xpath("//XCUIElementTypeApplication[@name=\"TBI\"]")).click();

driver.getKeyboard().sendKeys("abc");

на

MobileElement mobileElement = driver.findElement(By.xpath("//XCUIElementTypeApplication[@name=\"TBI\"]"));
mobileElement.sendKeys("abc");
0 голосов
/ 30 января 2019

вам не нужно использовать getKeyboard() вы можете напрямую отправить значение в поля

...