0

申し訳ありませんが、私は XPath と XML を初めて使用しますが、Selenium で作業しているため、XPath で要素を識別する助けが必要です。私が作業しているページのコンテンツの位置が変わると、最初にトップレベルを名前で選択する必要があります-次に、後続のサブメニューを位置で選択します... (サブメニューは、トップレベルがクリックされるまで非表示になります)

メニュー例

Sport1
  会場 1
    レース 1
    レース 2
    レース 3
  会場 2
    レース 1
    レース 2
    レース 3
Sport2
  会場 1
    レース 1
    レース 2
  会場 2
    レース 1
    レース 2

これまで//a[text()='Sport2'] のところ、メニュー内のどこに配置されていても、sports2 を選択 (および分岐) します。

//li[2]/ul/li[2]/ul/li[2]/a 2 番目のスポーツ、2 番目の会場、2 番目のレースを選択します。

ただし、必要なのは、テキストでスポーツを選択し(として//a[text()= 'Sports2'])、2番目の会場を選択してから2番目のレースを選択できるようにすることです...(名前が毎日変わるため、位置でこれらを実行したい)

私がしようとしている//a[text()= 'Sports2']/li[2]/ul/li[2]/a(そしてうまくいかない)

何か案は?

4

2 に答える 2

0

HTMLコードがはっきりと簡単に見えるようになるまで、私はあなたに一般的なアドバイスしかできません:

(Selenium 2)を使用している場合はWebDriver、要素を見つけて、その上でfindElement()を呼び出すことができます。これは、ドキュメント全体ではなく、基になるノードのみを検索します。

WebElement elem = driver.findElement(By.xpath("//a[text()='Sport2']"));
elem.findElement(By.xpath("./something[something()]"));

そうでない場合は、おそらくこれ ( XPath 1.0 仕様から) が役立ちます。

ロケーション パス//para[1]は、ロケーション パスと同じ意味ではありません/descendant::para[1]。後者は最初の子孫 para要素を選択します。前者は、親の最初の子であるすべての子孫para要素を選択します。para

于 2012-04-19T18:56:09.813 に答える