Поиск родительского элемента в 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"]');
Если элемент не существует, ваш класс ошибок не был добавлен.