0

Java および Selenium WebDriver で xpath を使用して、Web ページの XML ツリーからノードを選択しています。class = "red-button" のハイパーリンクであり、class = "step" の div 要素の子孫 (直接の子ではない) であるノードを選択する必要があります。これは私のコードです:

List<WebElement> goButton = driver.findElements(By.xpath("/div[@class=\"step\"]/a[@class=\"red-button\"]"));

        if(goButton.get(0)!= null){
            continueButton.get(0).click();
        }

動的に読み込まれるため、赤いボタン要素が表示されるまで待つ必要があります。これが、findElement() だけでなく、findElements() メソッドを使用することにした理由です。私の理解では、findElements() は、要素が見つかるかタイムアウトするまで DOM をプールします。コードを実行すると、次のようになります。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

これは、goButton が null であることを意味するため、WebDriver は要素を見つけることができませんでした。Java ロジックで何か間違ったことをしていますか、それとも xpath クエリを修正する必要がありますか?

4

1 に答える 1

0

XPATH が正しくありません。

/divルート DOM ノードの直下にある div を見つけます。最初//div//a、リンクを見つけてください。ここにいくつかの解決策があります。

CSS を使用する (xpath よりもクリーンで高速です)。

List<WebElement> goButton = driver.findElements(By.cssSelector("div.step a.red-button"));

XPATH を使用する (それを使用することに本当に固執している場合。

List<WebElement> goButton = driver.findElements(By.xpath("//div[@class='step']//a[@class='red-button']"));

子ではなく子孫を探しているため、xpath の//notを使用する必要があります。/

于 2013-09-19T17:46:11.857 に答える