Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 我可以从代码中选择什么,而不是xpath_Selenium_Selenium Webdriver_Protractor - Fatal编程技术网

Selenium 我可以从代码中选择什么,而不是xpath

Selenium 我可以从代码中选择什么,而不是xpath,selenium,selenium-webdriver,protractor,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={}--><!--t

对于上述代码

<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.)我可以通过type=“text”使用CSS,但是在页面上有更多使用该type=“text”的元素。因此,这也不起作用

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

4) 我不想使用绝对XPath


6) 有人可以为我提供这个问题的解决方案。

使用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');
});
请尝试以下代码:

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');
试试这个:

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

使用xpath:
//label[text()='First Name']//前面的同级::input
,或者您可以尝试使用label的for属性作为get Id的其他方法。并使用该id。您问题的答案取决于您希望对选择做什么?单击或双击或getText()?我想在文本字段中传递值,为此,我需要定位器,但不想使用Xpath。当我使用id执行此操作时,它会将错误显示为NoElement one。那么,我现在应该使用什么?尝试了这两种方法。我可以对第一个字段“first name”使用这种方法,但对last name字段也有相同的类。因此,它将显示错误,指出找到了多个元素。请尝试以下操作:。或者,如果需要每个元素,您可以循环遍历所有元素。那么对于第二个字段,我将做什么。@Anjalishing您是否尝试过使用我在编辑中添加的代码?嘿,这将仅适用于第一个字段,而不适用于其他字段。我在查询中提到,页面中有许多元素具有此类名。将错误显示为失败:输入必须是字符串
getAttribute
返回承诺。上面的代码不会按照编写的方式工作,嘿,非常感谢,它在我的所有字段中都工作得很好。因此,我只想知道这背后的逻辑。使用elmInput.click(),我可以单击元素,现在它不会显示错误,因为“此定位器存在多个元素”。你能告诉我你是如何使用last的逻辑吗?因为据我所知,它是关于last的,它将检索最后一个元素。嗨@Anjalishing,我们试图从你的html中获取所有包含文本
名字
div
,最后一个
div
包含
input
元素。因为我们现在知道,
input
元素位于
div
中。我们能够很容易地找到它。:)