2017-12-30 37 views
-1

XPathを使用して要素を検索しようとしています。これはChrome上で完璧に動作しますが、Internet Explorerではそれほど動作しません。 ChromeでXPathがIEで動作しないのはなぜですか?

、それが正常に動作しますが、私はIEのためにそれを実行しようとすると、私はスレッド「メイン」org.openqa.selenium.NoSuchElementExceptionで

例外と言い、次のエラー取得しています:にできませんがxpath == html/body/form/div [3]/div [2]/div/div [2]/aで要素を検索する

これを引き起こす原因は何ですか?私はすでに "プロテクトモード"と "ズーム"機能の設定のような最も一般的なIEエラーを修正しました。

+1

[ask]、特に[mcve](MCVE)の部分、[どのくらいの研究努力が必要ですか](https://meta.stackoverflow.com/questions)をお読みください。/261592/how-much-research-effort-of-stack-overflow-users)これはあなた自身のプログラムをデバッグし、自分で問題を解決するのに役立ちます。あなたがこれを行い、まだまだ立ち往生している場合は、あなたがMCVEを投稿し、何を試したのか、そしてエラーメッセージを含む実行結果を投稿して、より良くあなたを助けることができます。また、ページや関連するHTMLへのリンクを提供してください。 – JeffC

+0

明らかに、あなたは脆い絶対xpathを使用しようとしています。論理xpathを使用してみてください。 – DebanjanB

+0

XPathが1つのブラウザで動作するという理由だけで、別のブラウザで動作することが保証されているわけではありません。 HTMLレイアウトが2つのブラウザ間で少し変化するかどうかを確認する必要があります –

答えて

1

ブラウザに埋め込まれたXPathエンジンはブラウザのベンダーによって実装されているため、実際には実装上の違いがあります。 earier IEの場合、6と7のようにXPathエンジンは組み込まれていません。 XPathエンジンを組み込んでいないブラウザでXPathを使用する場合、Seleniumは自己XPathライブラリを使用してXPathを実行します.Selenuim XpathライブラリはすべてのXPath機能を実装せず、他のブラウザのXpathエンジンとも違いがあります。

戻るあなたの問題に、あなたが最初にsalshを逃したHTMLノードは、HTML DOMツリーのルートであるので、あなたがあなたのXPathの開始を伝えるために先頭に/を置く必要があるため、それは

/html/body/form/div[3]/div[2]/div/div[2]/a 

する必要がありますルートノードから

それともは、XPathでHTMLを省略することができます://body/form/div[3]/div[2]/div/div[2]/a

を、それがtruthy HTMLノードは、ブラウザのすべての種類のHTML DOMツリーのルートであるためです。

1

xpathをcssに変換します。 Xpathは、CSSセレクタが多くの場合同じクロスブラウザであるブラウザ間で異なる場合があります。クロムで検査することは問題ではありません。

HTML>ボディ>形態> DIV:n番目の子(3)> DIV:n番目の子(2)> DIV> DIV:n番目の子(2)>

ものXPathとIEが知られています彼らの問題のために。あなたは、XPathを使用する必要がある場合は、あなたが試すことができます読んFinding an elements XPath using IE Developer tool

0

ことの一つは、Firefoxのfirebugfirepathアドオンを使用してXPathを取得しても、要素の検査の間のロード時間すなわちThread.sleep()を増加させることによります。私が提案する最初のアイデアは、少なくとも私のために働く。質問があれば教えてください

関連する問題