Webdriver.IO - проверять неблокирующим образом, существует ли элемент - PullRequest
0 голосов
/ 09 мая 2019

вопрос новичка. Я использую webdriver.io для записи Appium сквозных тестов.

Я использую эти команды для проверки наличия элемента:

  • $(selector)
  • browser.waitForVisible(selector, timeout, waitForAppearOrDisappear);
  • browser.element('selector')

Все они блокируют мои тесты, если элемент не найден.

Как проверить, существует ли элемент в определенный момент, не блокируя выполнение теста?

Я не могу найти ничего в (краткой) документации .

PS. Это должно сработать browser.findElement(By.css('[data-qa="some-id"]'));, но это не команда wdio . (findElement и By не распознаются)


npm зависимости:

"appium": "^1.10.0",
"appium-doctor": "^1.6.0",
"wdio-appium-service": "^0.2.3",
"wdio-jasmine-framework": "^0.3.8",
"wdio-spec-reporter": "^0.1.5",
"webdriverio": "^4.14.1",

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Что ж, проще всего было бы злоупотребить тем фактом, что запрос к серверу Selenium (используя $ / элемент ) неразрывная операция .

Предположим, вам нужно запросить 2 элемента, один из которых отрисован внутри DOM, другой нет ( или элемент не существует вообще ).

let thisLoaded = $('span.coreSpriteFacebookIconInverted');
let thisDidnt = $('span.coreSpriteInstagramIconInverted');

Две переменные будут иметь следующее содержимое:

thisDidnt = { 
  sessionId: '7056961e1950b5c54827a51c137cca96',
  value: { ELEMENT: '0.8611270215748772-1',
           'element-6066-11e4-a52e-4f735466cecf': '0.8611270215748772-1' },
  selector: 'span.coreSpriteFacebookIconInverted',
  _status: 0 
}

thisDidnt = { 
  type: 'NoSuchElement',
  message: 'An element could not be located on the page using the given search parameters.',
  state: 'failure',
  sessionId: '7056961e1950b5c54827a51c137cca96',
  value: null,
  selector: 'span.coreSpriteInstagramIconInverted' 
}

Таким образом, теперь вы можете приступить к проверке ...

if (thisLoaded.value) {
  // > if element loaded <
} else { 
  // > if element didn't load <
}

Я добавлю больше, когда вернусь домой ...

1 голос
/ 13 мая 2019

Вместо этого используйте findElements - https://webdriver.io/docs/api/element/$$.html:

$$(selector)

Это должно вернуть вам пустой массив, если элемент не может быть найден, однако это не должно вызвать сбой.

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