-1

私はこのサイトhttp://www.barnesandnoble.com/で IDE を探索しようとしています。記録して再生するだけです。

1. 検索ボックスに検索するテキストを入力します。 2. [すべての製品] をクリックし、[書籍] を選択します。

そのxpathを記録すると、以下のようになります

/html/body[@id='CDS']/div[@id='navContainer']/div[@id='bnnav2011']/div[@id='yui_3_3_0_1_1355746621091_93']/div[@id='bn -グローバルヘッダー']/div[@id='yui_3_3_0_1_1355746621091_92']/div[@id='yui_3_3_0_1_1355746621091_91']/form[@id='qs']/div[@id='yui_3_3_0_1_13557466@1091_90'] id='yui_3_3_0_1_1355746621091_89']/ul[@id='yui_3_3_0_1_1355746621091_88']/li[@id='yui_3_3_0_1_1355746621091_99']

しかし、もう一度 ti を再生すると、エラー [error] locator not found: Wehn i search for its xpath , its chnaged が表示されます。

/html/body[@id='CDS']/div[@id='navContainer']/div[@id='bnnav2011']/div[@id='yui_3_3_0_1_1355748592221_91']/div[@id='bn -global-header']/div[@id='yui_3_3_0_1_1355748592221_97']/div[@id='yui_3_3_0_1_1355748592221_96']/form[@id='qs']/div[@id='yui_3_3_0_1_135574859221_95]/div[@'] id='yui_3_3_0_1_1355748592221_94']/ul[@id='yui_3_3_0_1_1355748592221_93']/li[@id='yui_3_3_0_1_1355748592221_98']

その ID が変化していることに注意してください。

これを処理する方法を教えてもらえますか?

4

5 に答える 5

1

IDE は XPath クエリの生成に関してはあまり賢くありません。実際、信頼できる XPath クエリを計算する自動化ツールはありません。なんで?その理由は、XPath クエリを生成するために、ツリーを (html要素の) 最上部から操作している要素まで下にたどるからです。

これは多くの場合に問題ありませんが、動的な値 (動的なテキスト/ID/名前/クラス、または位置が変わる場合でも) を持つ要素がある場合は、うまくいきません。

それを取得するには別の方法を検討する必要があるため、IDE が提供するものをオーバーライドする必要があります。

ソースを見ると、選択されたものは何でも のクラス値を与えますui-selectmenu-selected。したがって、ページが読み込まれると、「すべての製品」リスト アイテム ( li) がそのクラスを持ち、アイテムを変更すると、新しいアイテムがそのクラスを持ちます。

したがって、次の XPath を使用できます。

//li[@class='ui-selectmenu-selected']

または、この CSS セレクター:

li.ui-selectmenu-selected

または、この XPath を使用して、「すべての製品」アイテムを具体的に取得します。実際のメニューを使用して 1 レベル上で開始し、下に移動してアイテムを見つけます。

//ul[@class='ui-selectmenu']/li[text()='All Products' and not(@class='ui-selectmenu-hidden')]
于 2012-12-17T14:52:33.410 に答える
0

あなたの質問への答えとして、ID から離れて、親の n 番目の子を選択できる xpath または css セレクターを使用してみてください。あなたはセレンに慣れていないので、ここで私のメモを指摘したいと思い ます 。セレクターに役立つことが判明したのは、firepath がインストールされた状態で firebug を操作することです。このセットアップは、xpath および css セレクターを検証するのに役立ちます。

于 2012-12-17T20:09:44.110 に答える
0

xpath: Position を使用して試すことができます。IDは定期的に変更されているようです。

于 2012-12-17T13:00:59.023 に答える
0

その答えに基づいてあなたの質問を見ました。最初に Firefox で fire-path を追加する必要があります。firepath を使用すると、xpath ロケーターを見つけることができます。それはあなたにとって非常に簡単です

例:

driver.find_element_by_xpath("see![image which i have attached in this question][1] the xpath path locator details").click() 
于 2012-12-18T05:10:36.630 に答える
0

こんにちは Arran 私はあなたが与えた xpath を使用して [すべての製品] ボタンをクリックすることができます ( xpath= //ul[@class='ui-selectmenu']/li[text()='すべての製品' and not(@class= 'ui-selectmenu-hidden')] も利用可能なリストを取得しますが、メニューから本アイテムをクリックすることができません。

于 2012-12-29T16:35:18.307 に答える