我正在尝试创建此全局方法,点击此链接名为"Categories"
。 ID(t_166)是动态的,Xpath
(//*[@id="t_166"])
和“复制选择器”(#t_166)
也使用id
号码,因此它们无法使用。
所以,我留下了html:
我认为上课是个好人选。所以...开始:
var categorymenu = driver.instance.findelement(by.classname("fontMediumBigColorGrey navigatorLinkClicked z-label")
然后我希望它找到第一类并点击它,例如:
categorymenu.getattribute(category).click()
;
两个问题。
问题1:链接的类别会根据您之前访问它或其中的“linkclicked”部分而改变。如果您没有使用它,它将成为“fontMediumBigColorGrey z-label”。问题:如果班级不同,将无法找到类别。我该如何处理?
问题2:还有很多其他链接(比如用户)使用相同的类,所以不应该使用findelements然后用属性隔离它(类别就是这种情况)但是findelements似乎不是能够使用getattribute(因为它们有很多)所以我该如何覆盖那个部分?
谢谢!
答案 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(因为它不能使用它,因为它是动态的)。