2017-04-14 19 views
0

クラスIDがclsArrowClickで、同じIDが別のアンカータグにあるアンカータグをクリックします。セレン - 複数のアンカー - 同じID - フェッチできません

<td class="text-center" style="width: 25% !important;"> 
<td class="arrow" data-toggle="tooltip" data-container="body" title="" 
style="width: 25% !important; text-align:center" data-original- 
title="Select/Show Data"> 
**<a id="clsArrowClick" class="clsarrowClick" href="#" 
onclick="javascript:OpenAddNewWellPopup(this);"> 
<i class="fa fa-arrow-right"/> 
</a>** 
<input id="hdnIsSaved0" class="hdnIsArrowSaved" value="0" type="hidden"/> 
</td> 
</tr> 
<tr id="2"> 
<td style="width:50%; class=" '="" data-container="body" data- 
toggle="tooltip" title="" data-original-title="abcd">abcd</td> 
<td class="text-center" style="width: 25% !important;"> 
<td class="arrow" data-toggle="tooltip" data-container="body" title=""    
style="width: 25% !important; text-align:center" data-original-    
title="Select/Show Data"> 
**<a id="clsArrowClick" class="clsarrowClick" href="#" 
onclick="javascript:OpenAddNewPopup(this);"> 
<i class="fa fa-arrow-right"/> 
</a>** 
<input id="hdnIsSaved1" class="hdnIsArrowSaved" value="0" type="hidden"/> 
</td> 

私はこの方法で簡単な方法すべてを待って、リストを試してみましたが、私のプログラムは、スレッド内のエラー 例外

のように "メイン" org.openqa.selenium.ElementNotVisibleException

を/投げます/ WebDriverWait wait =新しいWebDriverWait(ドライバ、30); //wait.until(ExpectedConditions.presenceOfElementLocated(By.className("clsArrowClick "))); //driver.findElement(By.className("clsarrowClick ")); driver.findElement(By.xpath( "(.//*[ id = 'clsArrowClick'])[1]"))。

+0

1.あなたの条件に一致する要素をクリックしてください私は、ID = "clsArrowClick" &クラス= "clsarrowClick" と2つのリンクがある観察しました。そのうちの1人はJavaScript "OpenAddNewWellPopup(this)"を呼び出し、もう1人はJavaScript "OpenAddNewPopup(this)"を呼び出します。どちらをクリックしますか? 2. HTML DOMをもう少しペーストできますか? 3.あなたのHTML DOMは、私たちが解釈しやすいように整形しておいてください。 – DebanjanB

+0

私は最初の1つをクリックしたいと思います。私が提供できるすべてのHTML –

+0

findElementを使用すると、最初の要素が返され、xpathにインデックスを使用する必要はありません。 visibilityofelementlocated()expectedcondionを使用してください。 – Grasshopper

答えて

0

次のように試してください。xpathsは2番目のリンクで動作する可能性があります。私はそれをテストしていないし、私はあなたのページのHTML全体を知らないので、私は言ったかもしれない。

//a[@id='clsArrowClick'][2] 

またはこの1

//input[@id='hdnIsSaved1']../a[@id='clsArrowClick'] 

たり、要素を見つける前に、あなたはpresenceOfElementLocated条件を使用しているあなたのコードでclickin最初のリンク

//td[@class='arrow']/a[@id='clsArrowClick'] 
0

に興味がある場合は、次の。注目すべき重要なことは、presenceOfElementLocatedは、可視性にかかわらず、DOM上の要素の存在のみをチェックすることです。フェッチしている要素が表示されていることを確認する必要があります。そのためには、ExpectedConditions.visibilityOfElementLocatedを使用する必要があります。 visibilityOfElementLocatedは、その要素がDOM上で利用可能であり、また可視であることを保証するので、あなたが直面しているorg.openqa.selenium.ElementNotVisibleExceptionを克服するのに役立ちます。

アレッサンドロ-DA-rugnaで述べたように
WebDriverWait wait = new WebDriverWait(driver,30); 
wait.until(ExpectedConditions.visibilityOfElementLocated(
      By.xpath("(.//*[@id='clsArrowClick'])[1]"))); 
driver.findElement(By.xpath("(.//*[@id='clsArrowClick'])[1]")); //this step can be skipped 
driver.findElement(By.xpath("(.//*[@id='clsArrowClick'])[1]")).click(); 
-1

、IDは一意である必要があり、私はそれが固定されるべきだと思う:

だからあなたのコードは次のようになります。 Seleniumにはfind要素に関しても制限があります.2つ以上の要素がある場合は、表示されているかどうかにかかわらず、存在する最初の要素を選択します。あなたが得るように、あなたが要素

  • jayesh Doolaniで述べたように、あなたは

    WebElement MYELEMENTを使用することができますを見つける場合など//a[::following-sibling/input[@id='hdnIsSaved1']]のために、あなたのXPathが一意であることを確認し、いくつかの方法が

    1. があり、これを解決= wait.until (ExpectedConditions.elementToBeClickable(By.xpath()) myElement.click()

    2. 第二の方法は、その属性を確認することで、あなたの基準を満たしていることをどの要素を見つける、要素を見つけ使用し、必ず要素のクリック可能にすることです、enableメソッドをチェックします。その後

  • 0
    element = driver.findElement(By.xpath("html/body/div[9]/div/div/div[3]/button[2]")); 
         js = (JavascriptExecutor)driver; 
         js.executeScript("arguments[0].click();", element); 
         element = null; 
         js = null; 
    
    関連する問題