而不是xpath我可以从我的代码中选择

时间:2017-05-03 10:34:55

标签: selenium selenium-webdriver protractor

对于上述代码

<div class="md-input-infix">
  <!--template bindings={}-->
  <input class="md-input-element ng-pristine ng-valid ng-touched" id="md-input-19-input" spellcheck="false" type="text">
    <!--template bindings={}--><!--template bindings={}-->
    <label class="md-input-placeholder md-empty md-float" for="md-input-19-input">First name * 
    <!--template bindings={}-->
  </label>
</div>

1.)在此代码中,id每次都会更改。因此,我将无法选择id作为定位器

2.)我可以通过类型=&#34; text&#34;来使用CSS,但是在页面上还有更多元素,这个类型=&#34; text&#34;。所以,这也不会工作

3)我正在研究chrome来检查元素。在这种情况下,如果我可以选择XPath,它将会带有id。

4)我不想使用绝对XPath。

6)有人可以为我解决这个问题。

3 个答案:

答案 0 :(得分:1)

试试这个:

var elmDiv = element.all(by.cssContainingText('div', 'First name')).last();
var elmInput = elmDiv.element(by.css('[id^="md"]'))

答案 1 :(得分:0)

如何使用CSS选择器?

 input[class="md-input-element ng-pristine ng-valid ng-touched"]

或者您可以尝试首先找到父元素:

div[class="md-input-infix"]

然后在其后代中搜索。

尝试看看这是否有帮助:

element.all(by.css('input[class="md-input-element ng-pristine ng-valid ng-touched"]')).each(function(element) {
  element.sendKeys('blah blah');
});

答案 2 :(得分:0)

尝试以下代码:

var el = element(by.css("label:contains('Low Touch Client Name')"));
var elementID = el.getAttribute('id');    
var inputBox = element(by.id(elementID));
inputBox .sendKeys('my text');