如何通过Selenium和Java在同一标签中找到多个元素具有相同ID,名称和属性的元素

时间:2018-08-09 08:09:06

标签: java selenium selenium-webdriver xpath webdriver

enter image description here我想识别名字列的第二个字段。如何唯一地识别第二个字段。我尝试了//*[@id="depDob($index)"][2],但没有希望。这里两个名字字段具有相同的属性,在下面。

注意:在这里,第二个名字是隐藏的。单击复选框选项后,我们将得到第二个名字字段

您能帮忙吗?

<div class="seg2_formBox">
            <label for="depFirstName($index)" class="formly-field-label">First Name *
                <input id="depFirstName($index)" aria-describedby="userDepfn($index)" type="text" maxlength="15" ng-model="user.firstName" class="formly-field-input ng-pristine ng-valid ng-empty ng-valid-maxlength ng-touched" tabindex="0" ng-blur="validateUser(user, 'firstName')" ng-trim="false">
            </label>
            <span class="mbs2_formError" id="userDepfn" aria-live="polite" ng-show="user.firstNameError">Please enter a valid value for First Name</span>
        </div>

<div class="seg2_formBox">
                <label for="depFirstName($index)" class="formly-field-label">First Name *
                    <input id="depFirstName($index)" aria-describedby="userDepfn($index)" type="text" maxlength="15" ng-model="user.firstName" class="formly-field-input ng-pristine ng-untouched ng-valid ng-empty ng-valid-maxlength" tabindex="0" ng-blur="validateUser(user, 'firstName')" ng-trim="false">
                </label>
                <span class="mbs2_formError ng-hide" id="userDepfn" aria-live="polite" ng-show="user.firstNameError">Please enter a valid value for First Name</span>
            </div>

4 个答案:

答案 0 :(得分:2)

按索引选择元素(如果两个输入字段都不是同一父级的子级),而不是

//input[@id="depFirstName($index)"][2]

尝试

(//input[@id="depFirstName($index)"])[2]

答案 1 :(得分:0)

如果您的索引一直在变化-

rocker/verse

答案 2 :(得分:0)

您可以尝试在xpath中使用块类名称,然后等待其显示:

WebDriverWait inputField = new WebDriverWait(driver, 5);
    inputField.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//div [@class='seg2_formBox']//input"))))
            .sendKeys("some_to_input");

答案 3 :(得分:0)

根据 HTML ,您共享的两个带有属性 class =“ seg2_formBox” <div>标签的含义不相同。要标识字符序列并将其发送到第二个 First 字段,您可以使用以下解决方案:

  • 使用多个 class

    driver.findElement(By.xpath("//div[@class='seg2_formBox']//span[@class='mbs2_formError' and not(@class='ng-hide')]//preceding::label[1]")).sendKeys("Manoj Soundarrajan");
    
  • 使用单个

    driver.findElement(By.xpath("//div[@class='seg2_formBox']//span[@class='mbs2_formError']//preceding::label[1]")).sendKeys("Manoj Soundarrajan");
    

同样,所需元素似乎是Angular元素,因此您需要诱使 WebDriverWait 使所需元素可点击