2010-11-15 98 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