C# 硒-如何计算IList中的碘元素<;IWebElement>;并获得列表中的位置
我有一个问题,我不知道如何解决 我在页面上有5个完全相同的元素(相同的div、相同的类、没有id、相同的内部文本)。因此,我可以使用IWebElements构建xpath(Selenium返回给我的地方)IList。 我的目标是遍历这个列表,并“以某种方式”获得我单击的IWebElement 我知道,我可以使用xpath,比如://div[2]作为第二个元素,但问题是——我如何从列表中获取我点击到第二个WebElement的信息? 我能比较一下元素吗?(我尝试过比较GetHas()和比较webelements,但两者都不起作用) 我想要这样的东西:C# 硒-如何计算IList中的碘元素<;IWebElement>;并获得列表中的位置,c#,selenium,testing,C#,Selenium,Testing,我有一个问题,我不知道如何解决 我在页面上有5个完全相同的元素(相同的div、相同的类、没有id、相同的内部文本)。因此,我可以使用IWebElements构建xpath(Selenium返回给我的地方)IList。 我的目标是遍历这个列表,并“以某种方式”获得我单击的IWebElement 我知道,我可以使用xpath,比如://div[2]作为第二个元素,但问题是——我如何从列表中获取我点击到第二个WebElement的信息? 我能比较一下元素吗?(我尝试过比较GetHas()和比较webe
- 用户单击该元素
- 我的代码决定了它们中有很多
- 我的代码获取用户单击列表中第n个元素的信息
- 我的代码将生成xpath->//div[x],其中x是列表中元素的顺序
<div>
<div class="admin-nestable-list__item__content page-admin__item__content js-admin-nestable-list-item-content" style="">
<span>NEW PROPOSED PAGE (copy)</span>
</div>
<div class="admin-nestable-list__item__content page-admin__item__content js-admin-nestable-list-item-content" style="">
<span>NEW PROPOSED PAGE (copy)</span>
</div>
<div class="admin-nestable-list__item__content page-admin__item__content js-admin-nestable-list-item-content" style="">
<span>NEW PROPOSED PAGE (copy)</span>
</div>
<div class="admin-nestable-list__item__content page-admin__item__content js-admin-nestable-list-item-content" style="">
<span>NEW PROPOSED PAGE (copy)</span>
</div>
<div class="admin-nestable-list__item__content page-admin__item__content js-admin-nestable-list-item-content" style="">
<span>NEW PROPOSED PAGE (copy)</span>
</div>
<div class="admin-nestable-list__item__content page-admin__item__content js-admin-nestable-list-item-content" style="">
<span>NEW PROPOSED PAGE (copy)</span>
</div>
</div>
新建议页(副本)
新建议页(副本)
新建议页(副本)
新建议页(副本)
新建议页(副本)
新建议页(副本)
因此,如果用户单击第三个元素,我可以使用xpath://div/div[3]获取该元素,但我需要不同的方式:
我单击第3个元素并将该元素作为IWebElement对象获取-现在如果我想以编程方式生成xpath-我需要知道,我已经单击了第3个元素-因此我的想法是,我可以获取IWebElement列表:
private int GetTheOrderOfTheElement(string xpath, IWebElement objID)
{
IList<IWebElement> el = driver.FindElements(By.XPath(xpath));
int c = 0;
foreach(IWebElement e in el)
{
if (e == objID) return c;
c++;
}
return -1;
}
private int-gettheOrderOfeElement(字符串xpath,IWebElement-objID)
{
IList el=driver.FindElements(By.XPath(XPath));
int c=0;
foreach(el中的IWebElement e)
{
如果(e==objID)返回c;
C++;
}
返回-1;
}
问题是这不起作用
测试#1如@Prophet建议的:
我将其中一个输入放入scriptObject.CurrentObject进行测试,看它是否可以工作。在此之前,我已经对这个对象执行了trie.Click()操作,它成功了,所以selenium可以访问这个对象
不幸的是-然后我只是试图通过foreach//input找到这个元素/对象-但是没有找到这个对象
IList<IWebElement> elements = c.FindElements(By.XPath("//input"));
foreach (IWebElement e in elements)
{
if (e == scriptObject.CurrentObject)
{
string x = "OK";
}
}
IList elements=c.FindElements(By.XPath(“//input”);
foreach(元素中的IWebElement e)
{
if(e==scriptObject.CurrentObject)
{
字符串x=“确定”;
}
}
这是在我从点击页面中的一个输入接收到元素时执行的,然后我尝试再次找到它。。。并且找不到该元素
有什么建议吗?首先,如果您的元素
xpath
类似于//tag[@att='val']
,您可以通过(//tag[@att='val'])[n]
访问第n个元素,其中n
是您案例中从1到5的索引。关于验证单击的元素,我们需要查看网页。
有时,单击元素会导致该元素属性(通常是类名)发生一些更改,而在其他情况下,某些其他元素会发生更改,但在许多其他情况下,单击元素不会更改任何内容。
因此,这个问题没有一般性的答案,我们必须查看您正在使用的特定页面。已找到解决方案: 实际上,我可以使用上面的代码,但我需要检查HasCode,而不是对象本身:
private int GetTheOrderOfTheElement(string xpath, IWebElement objID)
{
IList<IWebElement> el = driver.FindElements(By.XPath(xpath));
int c = 0;
foreach (IWebElement e in el)
{
if (e.GetHashCode() == objID.GetHashCode()) return c;
c++;
}
return -1;
}
private int-gettheOrderOfeElement(字符串xpath,IWebElement-objID)
{
IList el=driver.FindElements(By.XPath(XPath));
int c=0;
foreach(el中的IWebElement e)
{
如果(e.GetHashCode()==objID.GetHashCode())返回c;
C++;
}
返回-1;
}
这并不是我的意思-请再次查看我的帖子-我用示例编辑了这篇文章。谢谢大家,关于编辑后的问题:这里到底是什么“不起作用”?它总是返回-1,因为在列表中找不到元素-但是列表包含5个相同的元素,比如objID,但是tbh-我不确定这是否起作用?如果我从页面上的javascript接收到objID,并将其转换为IWebElement(这很好),那么我希望当我遍历类似的IWebElement时会找到相同的元素。。。。但显然不是。。。。也许我错了……好吧,如果是这样的话,现在你问的完全是另一个问题。如果是这样的话,我现在首先要问:你能通过JS接收所有的5个WebElement吗?然后单击simply element.click()并迭代你的循环并检查它是否有效?在本例中,还要尝试验证未单击的元素是否都给出了e==objID
,以及单击的元素会产生什么结果?单击更改后,单击的元素可能会变成其他元素。请参阅我的更新:)我很高兴您终于找到了解决方案