2013-12-23 106 views
1

我有一個奇怪的場景,其中無法找到DOM中的所有元素。Java Selenium無法使用By.xpath查找DOM中的所有元素(「// *」)

當通過火狐瀏覽的DOM /「檢查元素」,我很清楚地看到一些「DIV」元素中不存在於與Java /硒產生的元件列表:

List<WebElement> elements = webDriver.findElements(By.xpath("//*")); 

我懷疑是上面的行不提供任何元素是不可見元素的子元素。

如果我懷疑是不正確的,那麼任何人都可以解釋我所看到的原因嗎?否則,如果確實如此,那麼繞過它的唯一方法是查看所有不可見元素並使其可見。

有沒有更好的方法來處理這個問題?

如果是 - 它是什麼?

如果否 - 我如何使所有元素可見(也許使用JavascriptExecutor)?

感謝

回答

0

問題:

當我通過火狐/瀏覽的網頁檢查元素,窗口最大化。

當我用Java/Selenium抓取網頁時,窗口沒有最大化。

在我正在處理的特定網頁中,一旦窗口達到一定大小(可能有一些JavaScript代碼在客戶端運行,則會添加一些元素(主要是廣告)(變成「未隱藏」),這對此負責)。

當前的問題不在Selenium內。

爲了解決它,一個僅需要添加下列行:。

webDriver.manage()窗口()最大化();

+0

恭喜您解決問題。是的,現代應用程序使用負責任的佈局和框架來支持它,如twitter引導。對於瀏覽器窗口的不同大小,這樣的框架可以動態地構建不同的html代碼 –

0

我建議,以獲取所有的HTML文檔節點所需的信息,使用一個單獨的HTML Parser庫。例如

  1. 獲得完整的頁面源代碼,使用driver.getPageSource();
  2. 使用http://jsoup.org或任何其他解析器解析文檔和提取所需的數據

這裏是一個example

String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>"; 
    Document doc = Jsoup.parse(html); 
    Element link = doc.select("a").first(); 

    String text = doc.body().text(); // "An example link" 
    String linkHref = link.attr("href"); // "http://example.com/" 
    String linkText = link.text(); // "example"" 

    String linkOuterH = link.outerHtml(); 
    // "<a href="http://example.com"><b>example</b></a>" 
    String linkInnerH = link.html(); // "<b>example</b>" 

我想補充說,通過WebDriver查詢所有元素是非常慢的操作。我在我的寵物項目Page Recorder中遇到過這個問題。
解決方案是使用HtmlAgilityPack-.NET HTML Parser - 以便在所有文檔節點上執行操作。

+0

謝謝。但是,我不通過WebDriver查詢所有元素。在注意到我無法找到特定元素後,我開始通過搜索所有元素來調查它。但事實是,我只是在尋找一個特定的元素,通過Firefox清晰可見,但由於某種原因Selenium無法看到。 –

1

另一種選擇是元素在一個框架中。在這種情況下,您必須致電webDriver.switchTo().frame(String name)。不要忘記之後切換回來,最好使用webDriver.switchTo()。defaultContent()。

我認爲Selenium也可以訪問隱形元素。我一直在訪問一些我自己隱身的元素。儘管如此,你仍然無法與他們互動。

當然,正如德米特里所說,以這種方式獲取所有元素並不是一種可行的方法。發現

+0

謝謝。但是,'iframe'在這裏不是這種情況。請參閱'http://www.picmonkey.com/'。如果您在整個頁面上執行「檢查元素」,您將看到html/body/div(homepage_main_view)/ div/div(content_wrapper)/ div(ad-homepage-top-wrapper)/ div/div(ad21)。 Selenium不會看到最後'div'中的所有內容。再來看看它,它可能是除導致此問題的「style」屬性之外的其他內容(可能是元素的深度)。 –

相關問題