我在原始webdriver中看到过几个使用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上没有uniques)
非常感谢任何帮助。
答案 0 :(得分:19)
通过检查Webdriver.IO source code只搜索了相同内容并发现了这一点 - 您可以使用el.$('..')
获取父元素,如下所示:
$('input[name="username"]').$('..') // returns the parent element
瞧!这是他们的XPath选择器支持的一部分。
答案 1 :(得分:1)
我最终通过使用execute从jQuery获取xpath来解决这个问题,这里是我使用的代码(虽然我正在编写一个不同的测试 - 如果每个带有*的标签都是必填字段)。希望这对未来的某些人有所帮助:
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;
});
我从另一个stackoverflow页面(How to calculate the XPath position of an element using Javascript?)
获得了xPath函数答案 2 :(得分:0)
WebdriverIO实际上允许您use XPath in your selectors,因此任何有效的Xpath选择器都应该可以找到您想要的元素。
或者,您可以使用isExisting来检查页面上是否存在使用错误类parent的元素:
driver.isExisting('.error input[name="username"]');
如果元素不存在,则不会添加错误类。
答案 3 :(得分:0)
当选择input[name="username"]
的父母时,我一直在谈论这个问题。
此元素的父级可以选择为//div[input[name="username"]]