2016-06-24 20 views
1

私はSelenium-WebDriverを初めて利用しています。要素を見つけてそれをクリックしようとしています。Selenium Webドライバ - 要素が見つかりません

しかし、常にエラーの下になって:関連するHTMLコードがある

"xpath = html/body/header/div/ul/li[2]/a/span[1]" 

<ul class="nav navbar-nav navbar-right top-nav "> 
<li class="identity has-icon"> 
<a href="......."> 
</li> 
<li class="settings has-icon"> 
<a href="......."> 
<span class="icon icon-cogs" aria-hidden="true" role="presentation"/> 
**<span class="nav-title">Settings</span>** 
</a> 
</li> 

私は内の要素を見つけることを試みてきたのxpath以下に提供

unable to locate an element

Firepath以下のようにします。

1. driver.findElement(By.xpath("//div[@id='right-nav']//a[contains(text(),'Settings')]")).click(); 

2. driver.findElement(By.xpath("//div[@id='nav-title']//a[contains(text(),'Settings')]")).click(); 

3. driver.findElement(By.xpath("//div[contains(@class, 'nav-title')]")).click(); 

誰かが解決策を見つけるのに役立つでしょうか?

答えて

0

そこにはが必要でなく、xpathには//が2回含まれていますが正しくありません。

内側のタグは唯一、CSSとして行動しているので、あなたは(ページには、ブートストラップを使用していると見えます)「(リンク)」で直接タグをクリックする必要があり

//@ is used to get the span class which is nav-title and 
// whose span text is Settings 
driver.findElement(By.xpath("//li/a/span[@class ='nav-title' and . = 'Settings']")).click(); 
+0

ありがとうございました。これは機能します。要素を見つけることができる相対パスに "// li/a ...."を追加するが、 "// span ..."は "要素は現在表示されていないエラー"を示しているのはなぜですか? "。"構文はコード内の意味ですか? – user6507067

+0

それだけでは変化だけではなく、要素テキストの値に 'と'を使った追加の識別要因にも依存します。あなたが[回答](http://stackoverflow.com/help/someone-answers)としてそれを受け入れると感謝します – Rao

0

に以下のステートメントを使用してください。次のコードを試してください、それは動作するはずです

driver.findElement(By.xpath("//a[contains(@href,'PUT href texts here')]")).click() 

これは動作しない場合は、コメントにブラウザとセレンのバージョンを記述してください。

+0

恐ろしい!これはうまくいった。 – user6507067

+0

@ user6507067うまくいきました。実際には、このトリックを使用して、最新のWebテクノロジーフレームワーク(ブートストラップ、角度jなど)で書かれたページの要素のxpathを見つけることができます。 –

0

テキスト「設定」でスパン要素をクリックする必要があります。下のxpathは、アンカータグ内のテキストとしてSettingsを含むspan要素を検索します。

.//a/descendant::*[contains(text(),'Settings')] 
+0

詳細を編集してください。コード専用と「試してください」の回答は、検索可能なコンテンツが含まれていないため、推奨されません。なぜ誰かが「これを試してみる」べき理由を説明しません。私たちはここで知識のためのリソースとなるよう努力しています。 – abarisone

+0

上記の解決策で「要素を見つけることができません」というメッセージが表示されました。 – user6507067

1

あなたはほぼそこにいますが、最終的にxpathでdivを使用しましたが、その代わりにspanを使用してみてください。

"//span[contains(@class, 'nav-title')]" 
+0

次のエラーが表示されます。「要素は現在表示されていないため、対話できない可能性があります。 – user6507067

+0

これを確認してください - http://stackoverflow.com/a/6317358/1115090 – Amol

0

次のいずれかを試してください。あなたは要素を取得します

//span[@class='icon icon-cogs'] 
//span[@class='icon icon-cogs'][@role='presentation'] 
//span[@class='icon icon-cogs'][@role='presentation']/span 

は、この単純なCSSセレクタがうまくいくかもしれないあなた

0

役立つことを願っています。ページのHTMLがなくても一意であるかどうかは分かりません。それは、クラスnav-titleSPANタグを探しています。

driver.findElement(By.cssSelector("span.nav-title")).click(); 
+0

次のエラーが表示されます。「要素は現在表示されていないため、やりとりできません」 – user6507067

+0

これは正しい要素を見つけていることを意味します。私はページHTMLなしであなたを助けることはできません。ページ上の要素を手作業で見つけ、それを見えるようにする方法を理解する必要があります。パネルを開くなど – JeffC

関連する問題