SeleniumとJavaを使用して、複数の要素が同じタグ内の同じID、名前、および属性を持つ要素を見つける方法

enter image description hereI want identify second field of first name column.How to identify the second field uniquely.I have tried //*[@id="depDob($index)"][2], but no hope.Here both the first name fields have same attributes which mentioned below.

Note: Here that second first name is hidden one.Once we click check box option, we'll get that second firstname field

あなたはこれについていくつか助けをお願いしますか?

<div class="seg2_formBox">
            
            Please enter a valid value for First Name
        </div>

<div class="seg2_formBox">
                
                Please enter a valid value for First Name
            </div>
1
@ManojSoundarrajanあなたが共有した HTML には2つの名(First Name)* フィールドがありません。私は何かが足りないのですか?
追加された 著者 DebanjanB,
@ManojSoundarrajan チェックボックスオプションクリックされた後にコピーされた、公開した2番目のフィールドの HTML です
追加された 著者 DebanjanB,
idが depFirstName で始まるように見えます。これは1番目または2番目のフィールドのHTMLですか。もう一方も共有しましょう。
追加された 著者 Guy,
詳細が更新されたコンテンツ
追加された 著者 Manoj Soundarrajan,
2番目のフィールドも同じHTMLコンテンツを持っています
追加された 著者 Manoj Soundarrajan,

4 答え

インデックスで要素を選択する(両方の入力フィールドが同じ親の子ではない場合)

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

やってみる

(//input[@id="depFirstName($index)"])[2]
1
追加された
"動作していない" について少し詳しく教えてください。
追加された 著者 Andersson,
ExplicitWait を実装しようとしましたか?
追加された 著者 Andersson,
<input id = "depFirstName($ index)" ...> は正しいHTMLですか?このHTMLコードには2つの要素がありますか?
追加された 著者 Andersson,
より詳細な質問を更新しました。
追加された 著者 Manoj Soundarrajan,
私はセレンIDEを使用して要素を識別しようとしました、それ自体はそれが要素を識別(強調表示)していません。
追加された 著者 Manoj Soundarrajan,
私は上記のXpathを使用するとき、セレンは要素を識別していません。
追加された 著者 Manoj Soundarrajan,
上の1つは働いていません。
追加された 著者 Manoj Soundarrajan,

As per the HTML you have shared ofcoarse the the two <div> tags with attribute class="seg2_formBox" are not identitical. To identify and send a character sequence to the second First Name field you can use the following solution:

  • Using multiple class:

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

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

Again, the desired element seems to be a Angular element so you need to induce WebDriverWait for the desired element to be clickable.

0
追加された
2番目のものはどうですか?
追加された 著者 DebanjanB,
更新された回答をチェックアウトして、結果を知らせてください。
追加された 著者 DebanjanB,
//div [@ class = 'seg2_formBox']//span [@ class = 'mbs2_formError'] /&zwnj;/previous :: label [1] 私はこのxpathを試しましたが、理想は違います発見
追加された 著者 Manoj Soundarrajan,
要素を識別すらしていない人の上に。
追加された 著者 Manoj Soundarrajan,
上記のものは、最初の名フィールドのみを識別します。2番目のものは使用しません
追加された 著者 Manoj Soundarrajan,

常にインデックスを変更している場合

//input[contains(@id, 'depFirstName')][2]
0
追加された
ここにセレンコードを投稿できますか。
追加された 著者 a_a,
私はセレンIDEを使用して要素を識別しようとしました、それ自体はそれが要素を識別(強調表示)していません。
追加された 著者 Manoj Soundarrajan,
私は上記のXpathを使用するとき、セレンは要素を識別していません。
追加された 著者 Manoj Soundarrajan,

あなたはxpathの中でブロッククラス名を使うことを試みることができて、それが表示されるまで待ちます

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