Dynamic Selenium获取动态ID XPath
我对Selenium是新来的,而且我的英语不是最好的 我正在将selenium与.NET一起使用 我有一个类似这样的HTML页面,但事件的数量不同:Dynamic Selenium获取动态ID XPath,dynamic,xpath,selenium,count,Dynamic,Xpath,Selenium,Count,我对Selenium是新来的,而且我的英语不是最好的 我正在将selenium与.NET一起使用 我有一个类似这样的HTML页面,但事件的数量不同: <div id="eventContent" style="text-align: center;"> <div class="event" id="event-8971062"> <ul> <li ...></li>
<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>
但对于这个例子,结果只有1个,而不是2个
当我尝试时:
Console.WriteLine(selenium.GetText("//div[@id='eventContent'][1]"));
它打印所有div,但当我打印时:
Console.WriteLine(selenium.GetText("//div[@id='eventContent'][1]/div"));
它只打印第一个div,我不明白为什么。
有人能这么好,给我解释一下这里发生了什么,我错在哪里
提前谢谢
艾露尔
这将返回id为eventContent
的div
的s的计数-只有一个div
像这样,这就是为什么计数为1(顺便说一句,计数变量通常是int
s,而不是decimal
s)
如果需要包含的div
s的计数,请使用
int count = selenium.GetXpathCount("//div[@id='eventContent']/div");
这将统计div的div
子级的数量,其id
为eventContent
。根据需要,这应该返回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
循环依次获取每个子div
s:
for(int i = 1; i <= count; ++i)
{
string childXpath = "//div[@id='eventContent']/div[" + i + "]";
string eventText = selenium.GetText(childXpath);
// Processing of eventText
}
for(int i=1;i尝试此操作,但返回0。我使用while表达式解决了此问题,其中我使用isElementPresent进行检查,如下所示:
int a = 1;
while (selenium.IsElementPresent("//div[@id='eventContent'][1]/div[" + a + "]"))
{
// check data here
a++;
}
看起来很有效。非常感谢你的帮助,
向elur致意我总是忘记xpath索引是基于1而不是基于0的。编辑了我的示例,该示例现在应该与您的while
循环相同。
for(int i = 1; i <= count; ++i)
{
string childXpath = "//div[@id='eventContent']/div[" + i + "]";
string eventText = selenium.GetText(childXpath);
// Processing of eventText
}
int a = 1;
while (selenium.IsElementPresent("//div[@id='eventContent'][1]/div[" + a + "]"))
{
// check data here
a++;
}