2010-11-15 163 views
4

我是新的硒,新的這裏,我的英語不是最好的。硒獲得動態ID XPath

我使用的是.NET硒...

我有一個HTML頁面這樣的,但事件的數量是不同的:

<div id="eventContent" style="text-align: center;"> 
     <div class="event" id="event-8971062"> 
      <ul> 
       <li ...></li> 
       <li ...></li> 
       <li ...></li> 
      </ul> 
     </div>      
     <div class="event odd" id="event-9224880"> 
      <ul> 
       <li ...></li> 
       <li ...></li> 
       <li ...></li> 
      </ul> 
     </div>   
</div> 

我需要檢查在所有提交的數據不同的div,但計數是動態的,(事件)ID也是動態的。我試圖首先找出div的數量,但這並不奏效。爲此,我試試這個:

DefaultSelenium selenium = new DefaultSelenium(...); 
decimal count = selenium.GetXpathCount("//div[@id='eventContent']"); 

但這隻帶來1結果,而不是兩個在這個例子。

當我嘗試:

Console.WriteLine(selenium.GetText("//div[@id='eventContent'][1]")); 

它打印的所有div,但是當我做:

Console.WriteLine(selenium.GetText("//div[@id='eventContent'][1]/div")); 

只會打印第一個div,我不明白爲什麼。 有人能這麼善良,給我解釋這裏發生了什麼以及我錯在哪裏?

在此先感謝 elur

回答

6
​​

這將返回的有eventContentiddiv S中的計數 - 只有一個div這樣的,這就是爲什麼你得到的1計數(計數偶然地,變量通常是ints而不是decimals)。

如果你想在的計數包含div S,使用

int count = selenium.GetXpathCount("//div[@id='eventContent']/div"); 

這算div兒童div用的eventContentid數量。根據需要,這應該返回2。

至於你GetText的例子,我覺得GetText將只返回與XPath參數選擇第一節點的文本。因此,與

selenium.GetText("//div[@id='eventContent'][1]") 

你得到div,其中自然包含了所有的孩子div S的整個文本,但

selenium.GetText("//div[@id='eventContent'][1]/div") 

你只得到第一孩子的文本div。這個xpath選擇所有的孩子div s,但GetText只對一個元素進行操作,我相信。如果要檢查每個孩子div反過來的文字,你需要先得到孩子div s的計數,然後使用for循環得到每一個依次爲:

for(int i = 1; i <= count; ++i) 
{ 
    string childXpath = "//div[@id='eventContent']/div[" + i + "]"; 
    string eventText = selenium.GetText(childXpath); 

    // Processing of eventText 
} 

一個for環並且在這裏需要手動xpath處理(而不是整理器foreach),因爲我相信Selenium沒有辦法獲取xpath並返回一組元素。

+0

+1的一個很好的答案。 – 2010-11-15 20:52:53

0

tryed這一點,但以0回報我解決了這個有表達,而在我與isElementPresent檢查這樣的:

int a = 1; 
while (selenium.IsElementPresent("//div[@id='eventContent'][1]/div[" + a + "]")) 
{ 
    // check data here 
    a++; 
} 

似乎工作等等。非常感謝您的幫助, 問候elur

+0

我總是忘記xpath索引是基於1而不是基於0的。編輯我的示例,現在應該和'while'循環一樣。 – AakashM 2010-11-15 20:53:14