Почему простой тест автоматизации с Appium не проходит? - PullRequest
0 голосов
/ 09 апреля 2020

Я занимаюсь разработкой приложения с помощью React Native и испытываю трудности в автоматизации тестирования с помощью инфраструктуры Appium.

Я никогда не использовал этот инструмент, и моя первая цель - проверить, существует ли следующий элемент на главном экране. PS: элемент существует.

<TouchableOpacity
  testID="test-login"
  accessibilityLabel="test-login"
>
    <Text>test login</Text>
</TouchableOpacity>

В проекте я создал папку test с sample.test. js file

const webdriverio = require('webdriverio');

const androidOptions = {
  capabilities: {
    browserName: 'Chrome',
    allowInsecure: {},
    denyInsecure: {},
  },
  desiredCapabilities: {
    browserName: 'Chrome',
    path: '/wd/hub',
    port: 4723,
    platformName: 'Android',
    app:
      '/Users/xxx/android/app/build/outputs/apk/debug/app-debug.apk',
    deviceName: 'xxx', // adb devices
    automationName: 'Appium',
    appPackage: 'XXX',
    launchActivity: 'XXX.MainApplication',
    chromeOptions: {w3c: false},
    ensureWebviewsHavePages: true,
    platformVersion: '8.0.0',
  },
};

describe('things', () => {
  let client;

  before(async () => {
    client = await webdriverio.remote(androidOptions);
  });

  it('test', async () => {
    //await client.elementByAccessibilityId('test-login');
    //client.elementsByAccessibilityId('test-login');
    await client.findElementsByAccessibilityId('test-login');
    //let elementsOne = await client.elementsByAccessibilityId('test-login');
    //let elementsTwo = await client.elements('id', 'test-login');
    //await client.elementByAccessibilityId('test-login').isClickable;
  });

  after(async () => {
    return await client.deleteSession();
  });
});

и запустите его с узлом ./node_modules/.bin/mocha.

Вывод будет

things
INFO webdriverio: Initiate new session using the devtools protocol
INFO devtools: Launch Google Chrome with flags: --disable-extensions --disable-background-networking --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-sync --metrics-recording-only --disable-default-apps --mute-audio --no-first-run --disable-hang-monitor --disable-prompt-on-repost --disable-client-side-phishing-detection --password-store=basic --use-mock-keychain --disable-component-extensions-with-background-pages --disable-breakpad --disable-dev-shm-usage --disable-ipc-flooding-protection --disable-renderer-backgrounding --enable-features=NetworkService,NetworkServiceInProcess --disable-features=site-per-process,TranslateUI,BlinkGenPropertyTrees --window-position=0,0 --window-size=1200,900
INFO devtools: Connect Puppeteer with browser on port 51345
    1) test
    ✓ should create and destroy Android browser session
INFO devtools: COMMAND deleteSession()
INFO devtools: RESULT null

  0 passing (1s)
  1 failing

  1) things
        test:
      TypeError: client.findElementsByAccessibilityId is not a function
      at Context.it (test/sample.test.js:97:18)
      at process.topLevelDomainCallback (domain.js:126:23)

Телефон android с приложение в режиме отладки подключено к компьютеру.

Я попробовал фрагменты об этом, но безуспешно.

Не могли бы вы помочь мне с первым шагом?

Спасибо всем .

1 Ответ

0 голосов
/ 10 апреля 2020

В сообщении об ошибке говорится: «TypeError: client.findElementsByAccessibilityId не является функцией»

Это означает, что объект, возвращенный из webdriverio.remote, не имеет функции findElementsByAccessibilityId.

Вы должны добавить что-то вроде этого:

console.log(Object.getOwnPropertyNames(client));

или

console.log(Object.getOwnPropertyNames(client).filter(x => typeof client[x] == 'function'));

перед вызовом client.findElementsByAccessibilityId, чтобы увидеть, что он на самом деле содержит.

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