Поиск родительского элемента в webdriver.io

Я видел несколько решений в исходном веб-драйвере, которые используют getAttribute('xpath') и добавляют к этому '/..', но webdriver.io не имеет атрибута xpath, поэтому я не смог его использовать, Любые идеи о том, как захватить родительский элемент?

Случай, который я пытаюсь проверить, находится внутри макета начальной загрузки, и элемент, который фактически получает класс, который я пытаюсь проверить, находится выше. Это выглядит так:

<div class="form-group">
  <input class="form-control" type="text" name="username">
  <other stuff>
</div>

Я выбираю по driver.element("input[name='username'"], но класс ошибок фактически попадает в div

<div class="form-group error">
  <input class="form-control" type="text" name="username">
  <other stuff>
</div>

Поэтому мне нужно проверить, есть ли у самого div класс ошибок, а не вход, который я могу найти (в div нет уникальных)

Любая помощь будет принята с благодарностью.

4 ответа

Решение

Просто искал то же самое и нашел это, изучив исходный код Webdriver.IO - вы можете использовать el.$('..') чтобы получить родительский элемент, вот так:

$('input[name="username"]').$('..') // returns the parent element

Вуаля! Это часть их поддержки селекторов XPath.

В итоге я решил эту проблему, используя execute, чтобы получить xpath из jQuery, вот код, который я использовал (хотя для другого теста, который я писал, - если каждая метка с * является обязательным полем). Надеюсь, это пригодится кому-то в будущем:

var requiredXPaths = browser.execute(function () {
var returner = [];
var $elements = $('.modal.fade.in').find("label:contains('*')");
  _.each($elements, el => {
    var xpath = '';
    var element = el.parentElement;
    for (; element && element.nodeType == 1; element = element.parentNode) {
      var id = $(element.parentNode).children(element.tagName).index(element) + 1;
      id > 1 ? (id = '[' + id + ']') : (id = '');
      xpath = '/' + element.tagName.toLowerCase() + id + xpath;
    }

    returner.push(xpath);
  });
  return returner;
});

Я получил функцию xPath с другой страницы stackru ( Как рассчитать положение XPath элемента с помощью Javascript?)

Я говорил об этом в Gitter, когда родитель может быть выбран input[name="username"]

Родитель этого элемента может быть выбран как //div[input[name="username"]]

WebdriverIO фактически позволяет вам использовать XPath в ваших селекторах, поэтому любой действительный селектор Xpath должен работать, чтобы найти нужный элемент.

В качестве альтернативы, вы можете просто использовать isExisting, чтобы проверить, существует ли элемент на странице, используя родительский класс ошибки:

driver.isExisting('.error input[name="username"]');

Если элемент не существует, ваш класс ошибок не был добавлен.

Другие вопросы по тегам