2016-08-18 15 views
3

driver.findElement()によってすべての要素にアクセスできました。 dhtmlxライブラリを使用してツリー要素が作成されました。その要素に到達しようとするとNoSuchElementExceptionが発生しますSelenium dhtmlxtree ChromeのNoSuchElementException Java

私はid、xpath、クラス、テキストなどで到達しようとしましたが、いずれも私のために働いていませんでした。暗黙の待機とThread.sleep()メソッドを試しましたが、結果は同じです。

> <tr> <td class="standartTreeImage"> <img border="0" align="absmiddle" 
    > style="padding: 0px; margin: 0px; width: 18px; height: 18px;" 
    > src="http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/plus3.gif"> 
    > </td> <td width="20px" style="display: none;"> <img align="absmiddle" 
    > src="http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/iconUncheckAll.gif" 
    > style="width: 16px; height: 16px;"> </td> <td 
    > class="standartTreeImage" style="width: 18px;"> <img border="0" 
    > align="absmiddle" style="padding: 0px; margin: 0px; width: 18px; 
    > height: 18px;" 
    > src="http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/folderClosed.gif"> 
    > </td> <td class="standartTreeRow" nowrap="" style="width: 100%; 
    > font-size: 10pt; cursor: pointer;"> <span class="standartTreeRow" 
    > style="padding-left: 5px; padding-right: 5px;">hr-istanbul [15]</span> 
    > </td> </tr> 

たとえば、次のようなものがあります。最初にtdをクリックする必要があります。ロケータだけがイメージですが、要素にアクセスできません。NoSuchElementException。

element = driver.findElement(By.xpath("//img[contains(@src,'http://marduk:5543/atlas/themes/third_party/dhtmlx/dhtmlxTree/codebase/imgs/vse_datasources/plus3.gif')]")); 

また、最後の列要素にも到達しようとしましたが、いずれも機能しませんでした。

element = driver.findElement(By.xpath("//*[contains(text(), 'hr-istanbul [15]')]")); 
+0

同じIDを持つ複数の要素があることができます - :?もしそうであれば、あなたは以下のように要素を見つける前frameまたはiframeがいることを切り替える必要がありますか – user2761286

+0

あなたのhtmlとjavaコードを共有します – Ab123

+0

それらのいくつかはどんなidも含んでいませんが、それらを見つけるためにユニークなテキストフィールド等を持っています。私が言ったように私は共有することはできません、彼らの一部を共有しようとします –

答えて

1

あなたが提供する例外としてNoSuchElementExceptionを取得している場合は、その理由が、次のことがあります -

  • は間違ったロケータで位置されてもよいし、だから、より良いロケータ解決のためのHTMLを共有する必要があります。

    WebDriverWait wait = new WebDriverWait(driver, 10); 
    WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(byObject)); 
    
  • この素子であってもよい - :

  • あなたは要素を検索しようとしている場合は、以下のように目に見える要素はまでは待つようにWebDriverWaitを実装する必要がありますので、それは、DOMには存在しないかもしれませ任意のframeまたはiframeの内部にあります。

    WebDriverWait wait = new WebDriverWait(driver, 10); 
    
    //Find frame or iframe and switch 
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("your frame id or name")); 
    
    //Now find the element 
    WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(byObject)); 
    
    //Once all your stuff done with this frame need to switch back to default 
    driver.switchTo().defaultContent(); 
    
+0

アドバイスありがとうございます。私はhtmlを共有しました。私はあなたの解決策を試みましたが、うまくいきません。また、iframeの中にはありません –

+1

提供されたHTMLに 'plus3.gif'と表示されている間に' minus3.gif'を探していますか?私はあなたのロケータを修正する必要があると思う.. :) –

+0

申し訳ありません私の悪い..問題はそれから独立しています。私は編集しましたが、変更はありません。 –

関連する問題