在webdriver.io中查找父元素

时间:2016-08-17 17:14:28

标签: webdriver-io

我在原始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)

非常感谢任何帮助。

4 个答案:

答案 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"]]