在Selenium中使用Findelements后如何找到一个元素?

时间:2017-01-11 13:10:20

标签: c# selenium selenium-webdriver

我正在尝试创建此全局方法,点击此链接名为"Categories"。 ID(t_166)是动态的,Xpath (//*[@id="t_166"])和“复制选择器”(#t_166)也使用id号码,因此它们无法使用。

所以,我留下了html:

enter image description here

我认为上课是个好人选。所以...开始:

var categorymenu = driver.instance.findelement(by.classname("fontMediumBigColorGrey navigatorLinkClicked z-label")

然后我希望它找到第一类并点击它,例如: categorymenu.getattribute(category).click();

两个问题。

问题1:链接的类别会根据您之前访问它或其中的“linkclicked”部分而改变。如果您没有使用它,它将成为“fontMediumBigColorGrey z-label”。问题:如果班级不同,将无法找到类别。我该如何处理?

问题2:还有很多其他链接(比如用户)使用相同的类,所以不应该使用findelements然后用属性隔离它(类别就是这种情况)但是findelements似乎不是能够使用getattribute(因为它们有很多)所以我该如何覆盖那个部分?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用XPath搜索来查找您的元素:

var categorymenu = driver.instance.findelement(by.xpath("//span[text()='Categories']")

在上面的代码中,您搜索span元素,其中"Categories"为其文本值

此外,您可以尝试以下列方式忽略动态更改id属性的一部分:

var categorymenu = driver.instance.findelement(by.xpath("//div[starts-with(@id, 't_')][substring-after(@id, '-')='cave']/span")

上面的代码应该搜索span的{​​{1}}的孩子div id="t_XXXX-cave",其中XXXX被忽略

注意您还应该知道,由于categorymenu.getattribute(category).click();(实际上categorymenu.getattribute(category))只返回一个字符串值,您将无法完成categorymenu.GetAttribute(category)

答案 1 :(得分:0)

如果您想查看span是否有fontMediumBigColorGrey class

var categorymenu = driver.instance.findelement(by.xpath("//span[contains(@class, 'fontMediumBigColorGrey')]")

如果您想查看文本是否等于“类别”:

var categorymenu = driver.instance.findelement(by.xpath("//span[text()='Categories']")

我有时使用的技巧,也可能对您有用 - 如果您使用的是Chrome,请打开控制台并以删除“id”标记的方式编辑HTML。然后,右键单击并选择“复制>复制XPath'。这将复制XPath但忽略ID(因为它不能使用它,因为它是动态的)。