Как «нажать» и / или «нажать» кнопку с помощью Appium / webdriverio? - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь после запуска моего приложения выполнить действие касания / нажатия на элемент кнопки с помощью селектора XPath. Это гибридное приложение (нативное + некоторые веб-просмотры).

У меня возникли проблемы, поскольку документы по Appium, похоже, вводят в заблуждение (потенциально).

getDriver ():

  const driver = await remote({
    capabilities: {
      platformName: 'IOS',
      browserName: 'mobileOS',
      deviceName: config.deviceName,
      securityToken: config.securityToken,
      app: 'PUBLIC:my-app.ipa'
    },
    hostname: config.hostname,
    path: config.path,
    port: config.port,
    logLevel: config.logLevel
  });

Вот как я могу загрузить драйвери работает. Это запустит устройство и откроет приложение, которое я устанавливаю.

Я пытаюсь выполнить касание или нажать или щелкнуть действие:

const el = driver.$('//*[@name="MyButton"]');
driver.touchPerform([
      { action: 'press', options: { element: el } },
      { action: 'release'}
    ]);

Я получаю ошибку: Запрос не выполнен из-за java.util.LinkedHashMap не может быть приведен к java.lang.String

или

const el = driver.$('//*[@name="MyButton"]');
driver.touchPerform(
      { action: 'tap', options: { element: el } }
);

Полученная ошибка: Ошибка при получении WebDriver: искаженный тип для параметра "действий" команды touchPerform Ожидается: объект [] Факт: объект

Первоначально я следую этому документу: http://appium.io/docs/en/commands/interactions/touch/tap/ и / или http://appium.io/docs/en/commands/interactions/touch/touch-perform/

Теперь я могу понять, почему touchPerform (нажатие) можетне работает из-за его указания на других документах, что он может использовать только x, y потенциально.

Но кран - это то, что сбивает меня с толку. Если я обертываю объект, который отправляю в файле driver.touchPerform в массиве, например:

const el = driver.$('//*[@name="MyButton"]');
driver.touchPerform([
      { action: 'tap', options: { element: el } }
]);

Я получаю ту же ошибку, что и предыдущая: Запрос не выполнен из-за java.util.LinkedHashMap не может быть приведенto java.lang.String

Мой вопрос: Использую ли я неправильный выбор или событие касания для нажатия кнопки на мобильном устройстве?

Я также попробовал метод http://appium.io/docs/en/commands/element/actions/click/, и когда я пытаюсь, он говорит мне driver.$(..).click() is not a function

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 21 октября 2019

Для всех, у кого есть подобные проблемы, я наконец-то нашел ответ на свой вопрос.

Хотя я использую версию webdriverio, где первый пример на этом: http://appium.io/docs/en/commands/element/find-element/

должно работать, это не так. На самом деле это третий пример, который помогает мне найти элемент.

await driver.findElement('name', selector);

Другой проблемой, с которой я столкнулся, был мой XPath по отношению к Perfecto, который был неверным. В javascript мой xpath сработал бы, но perfecto очень точно определяет его xpath. Вам нужно перейти (на Perfecto) на вкладку Автоматизация в старой структуре лаборатории. Перейдите в «Шпион объектов», и вы сможете щелкать по элементам, похожим на инструмент Chrome Inspect.

XPath, который, как я думал, будет, был '//*[@name="MyButton"]', но на самом деле это было: //AppiumAUT/XCUIElementTypeApplication[1]/XCUIElementTypeWindow[3]/XCUIElementTypeOther[1]/XCUIElementTypeOther[1]/XCUIElementTypeNavigationBar[1]/XCUIElementTypeButton[2] ЧтоМне действительно нужно было правильно использовать стратегию локатора.

findElement(locator strategy, selector)

, где стратегия локатора находится здесь: http://appium.io/docs/en/commands/element/find-elements/index.html#selector-strategies

Затем нажмите:

driver.elementClick(element.ELEMENT);

Это не где в appium docs или в документах webdriverio. Но некоторые копаются в git внутри примера кода appium. Этот удобный пример кода данди для основных взаимодействий: https://github.com/appium/appium/blob/master/sample-code/javascript-webdriverio/test/basic/ios-basic-interactions.test.js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...