硒获得动态ID XPath
我是新的硒,新的这里,我的英语不是最好的。硒获得动态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
这将返回的有eventContent
的id
div
S中的计数 - 只有一个div
这样的,这就是为什么你得到的1计数(计数偶然地,变量通常是int
s而不是decimal
s)。
如果你想在的计数包含div
S,使用
int count = selenium.GetXpathCount("//div[@id='eventContent']/div");
这算div
儿童div
的用的eventContent
的id
数量。根据需要,这应该返回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并返回一组元素。
tryed这一点,但以0回报我解决了这个有表达,而在我与isElementPresent检查这样的:
int a = 1;
while (selenium.IsElementPresent("//div[@id='eventContent'][1]/div[" + a + "]"))
{
// check data here
a++;
}
似乎工作等等。非常感谢您的帮助, 问候elur
我总是忘记xpath索引是基于1而不是基于0的。编辑我的示例,现在应该和'while'循环一样。 – AakashM 2010-11-15 20:53:14
+1的一个很好的答案。 – 2010-11-15 20:52:53