我是Selenium的新人,新来的,我的英语不是最好的。
我正在使用selenium和.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
答案 0 :(得分:6)
decimal count = selenium.GetXpathCount("//div[@id='eventContent']");
这将返回div
id
eventContent
的{{1}}的数量 - 这样只有一个div
,这就是为什么你会得到1(计数变量通常是int
而不是decimal
s,顺便提一下。
如果您想要包含 div
的计数,请使用
int count = selenium.GetXpathCount("//div[@id='eventContent']/div");
这将计算div
div
id
的{{1}} 孩子的数量。这应该根据需要返回2.
至于您的eventContent
示例,我认为GetText
只会返回xpath参数选择的 first 节点的文本。所以用
GetText
您可以获得父 selenium.GetText("//div[@id='eventContent'][1]")
的完整文本,该文本自然包含所有子div
,但
div
您只能获得第一个子selenium.GetText("//div[@id='eventContent'][1]/div")
的文字。我相信,此xpath选择所有子div
,但div
仅对单个元素进行操作。如果您想依次检查每个孩子GetText
的文字,您需要首先获得孩子div
的计数,然后使用div
循环来获取每个孩子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处理(而不是neater foreach
),因为我相信Selenium没有办法获取xpath并返回元素集合。
答案 1 :(得分:0)
尝试了这个但是返回0.我用一个while表达式解决了这个问题,我用isElementPresent检查了这个:
int a = 1;
while (selenium.IsElementPresent("//div[@id='eventContent'][1]/div[" + a + "]"))
{
// check data here
a++;
}
似乎是这样的。非常感谢你的帮助, 最好的问候elur