2014-10-09 25 views
0

背景Selenium WebDriver,Java:如何通過比較兩個元素來確定頁面是否完全加載?

我使用Selenium WebDriver/Java來刮一張表。我感興趣的表格分成許多不同的頁面(=必須點擊鏈接才能看到下一頁)。表格底部是一個不完整的數字索引(整個表格爲170多頁,當您位於前20頁的其中一頁時,索引包含第1-20頁的鏈接,當您位於第21-40頁時,索引包含第21-40頁等的鏈接),您可以點擊特定號碼來加載該頁面。整個指標位於一個單元格中,如此12 ... 20。也有鏈接到第一個上一頁頁,下一頁Last page。

到當前頁面的鏈接數量有一個特定的類別(當前頁面)。我通過點擊下一頁瀏覽每個頁面,這裏是問題:如何在下一頁時驗證表格是否已完成加載?

在這個項目

通常情況下,以驗證頁面硒收益完全加載之後我用這樣的代碼:

webDriverBackedSelenium.click(xpathToSomeLink); 
new WebDriverWait(driver, normalTimeout).until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpathToSomeElemen))); 

現在我的問題/問題:我一直無法寫一個XPath我可以在上面的代碼中使用它。我想我需要的是,在Selenium點擊一個鏈接之後,看看A -tag的內容,它的類別爲CurrentPage,並確認它已經改變(+1),而不是點擊之前。

我發現了什麼樣子的怎麼寫,這裏的目標標記的內容http://manual.calibre-ebook.com/xpath.html#selecting-by-tag-content XPath的一個很好的例子,但是當我在Firebug/Firepath運行他們的榜樣//h:h2[re:test(., 'chapter|section', 'i')]我剛剛收到一條錯誤消息的XPath是無效的。爲什麼?他們的例子有什麼問題?我如何寫一個XPath我可以這兩種情況之間的區別(我21頁的第一種情況下,在第二個例子中,我第22頁):

<table> 
    <tr> 
     <td> 
      <a class="CurrentPage" href="javascript:doPostBack('XXX')">21</a> 
      <a class="OtherPage" href="javascript:doPostBack('XXX')">22</a> 

<table> 
    <tr> 
     <td> 
      <a class="OtherPage" href="javascript:doPostBack('XXX')">21</a> 
      <a class="CurrentPage" href="javascript:doPostBack('XXX')">22</a> 

最後請注意:我使用的硒從網站上抓取數據,也就是說,重新設計它以使上述過程更簡單不是一種選擇。

+0

您可以使用'find_element_by_partial_link_text'.You可以給'page'或其他常量並保留變量部分。 – vks 2014-10-09 12:00:46

+0

我可以以某種方式使用XPath限定它嗎?因爲我所使用的表格充滿了數字,並且大多數在0到100之間,因此表格中的頁碼和一些數據重合是一個很大的風險。 – 2014-10-09 13:20:15

+0

@ user23122 *實際*問題是什麼?你想要一個Xpath返回''元素的類屬性等於'CurrentPage'嗎? '// a [@ class ='CurrentPage']' – har07 2014-10-09 13:33:08

回答

0

最後我用這個XPath建設//a[.='17']和類似下面的代碼(略簡體):

int nextPageNumber = Integer.parseInt(driver.findElement(By.xpath(linkActivePage)).getText()) + 1) 
String xpathToNextPage = "xPathPrefix + "a[.='" + nextPageNumber + "']"; 
webDriverBackedSelenium.click(linkNextPage); 
new WebDriverWait(driver, normalTimeout).until(ExpectedConditions.presenceOfElementLocated(By.xpath(xpathToNextPage))); 

看起來工作沒問題,但我歡迎評論如何改進它!

0

如果這些是唯一的兩個標籤,那麼使用一個CSS選擇器,而且更容易。孩子的數量可以通過一個簡單的循環

TD控制的:第n個孩子(2)

+0

有19個條目使用相同的CSS類。你能詳細說明循環是如何工作的嗎? – 2014-10-09 13:32:58

+0

你應該可以用:nth-​​child()來縮小它的範圍。 – Saifur 2014-10-09 13:34:29

+0

儘管我不建議你這樣做,但是你可以遍歷這19個元素並使用一個匹配你想要的數字的if子句並單擊。如果你需要更多的幫助來闡述你的html,我可以幫你找到選擇器 – Saifur 2014-10-09 13:42:55

0

所以,你好像有兩個問題:

  1. 我需要爲一個XPath元件。
  2. 我如何確保在頁面加載

A1。 XPath的是:

//a[@class='CurrentPage'] 

A2。等待頁面上的元素是可見的,是這樣的:

WebDriverWait wait = new WebDriverWait(driver, 10); //wait however long to ensure it should be loaded 
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("CurrentPage"))); 
相關問題