1

親愛なるSeleniumWebdriverスペシャリスト、

"/ html / body / form / div [2] / div [4] / div [1] / div / div / div [1] /でXPathクエリを実行すると、(ifステートメントで)次の例外が発生します。 a " http://www.domain.com.au/Property/For-Sale/House/NSW/Auburn/?adid=2010111460から:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a"}

以下は、この例外が発生したコードスニペットです。

WebDriver driver = new FirefoxDriver(firefoxProfile);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("http://www.domain.com.au/Property/For-Sale/House/NSW/Auburn/?adid=2010111460");

if (driver.findElement(By.xpath("/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a")).isDisplayed() && 
    driver.findElement(By.xpath("/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a")).getAttribute("href").length() > 0) {
    WebElement photoPageElement = driver.findElement(By.xpath("/html/body/form/div[2]/div[4]/div[1]/div/div/div[1]/a"));
    photoPageURL = photoPageElement.getAttribute("href");
    .....
} 

このコードスニペットは、 http://www.domain.com.au/Property/For-Sale/House/NSW/Auburn/?adid= 2010007127などの他のプロパティから同じ要素を見つけることに成功しています。

このような例外の原因を特定するために、同じドキュメントをトラバースするための高品質のXML/XHTMLエクスプローラーを探しています。

例外が発生するリスクなしに要素の存在を確認することは可能ですか?driver.findElement(By.xpath(....)。isDisplayed())はそれを行うためのものだと思いました。

Windows XP/7でSeleniumWebdriver2.25.0、Java 7.0、Netbeans7.2を実行しています。

あなたのアドバイスをいただければ幸いです。

前もって感謝します、

ジャック

4

1 に答える 1

0

スクリプトをより読みやすく堅牢にするために、XPath の代わりに CSS と ID ロケーターの使用を開始することをお勧めします。CSS ロケーターも高速化する必要があります。これは、より大規模なテスト スイートを実行する場合に便利です。要素ロケーターを理解するには、たくさんのオプションがあります。たとえば、何もインストールせずに、Chrome と Firefox では右クリック -> 要素の検査、IE では開発者ツールがあります。

おそらく、XPath ロケーターに何らかの問題があり、その結果 NoSuchElementException が発生します。これが予想される場合は、例外をキャッチできますが、リンク URL を取得することが目的の場合は、おそらくそうしたくないでしょう。

たとえば、最初にリンクしたページを見ると、全体像が a 要素内にラップされています。

<a id="ctl00_ctl00_Content_Content_propertyPhotos_MainImage_MainPhotoLink" class="feature" target="ImageWindow" href="/ore/Public/Gallery/Photo.aspx?adid=2010111460&pic=1&mode=Buy"> 

Java で WebDriver を使用して id でこの要素を見つける:

WebElement element = driver.findElement(By.id("ctl00_ctl00_Content_Content_propertyPhotos_MainImage_MainPhotoLink"));

そして、href を読む:

String linkHref = element.getAttribute("href");

ここでCSS セレクターについて読むことができます。これらを使用すると、WebDriver<img>の MainImage 内をクリックするなどの操作を実行できます。<div>

driver.findElement(By.cssSelector("div#ctl00_ctl00_Content_Content_propertyPhotos_MainImage_upnlHeroImage img")).click();
于 2012-11-29T09:41:22.893 に答える