使用 Groovy 脚本检查多个 HTML 元素中的相同属性
Check for same attribute in a number of HTML elements using Groovy script
嗨,我是 Groovy 的新手。
我想深入 DOM 结构并检索一组元素并检查这些元素是否具有特定属性。
下面是我用来检查属性的语句-
assert $("#myID > div > div > div > p > a > span").attr("class").contains("my-class")
$("#myID > div > div > div > p > a > span")
returns 3 个跨度元素,因此上述语句失败并抛出错误 -
geb.error.SingleElementNavigatorOnlyMethodException: Method getAttribute(java.lang.String) can only be called on single element navigators but it was called on a navigator with size 3. Please use the spread operator to call this method on all elements of this navigator or change the selector used to create this navigator to only match a single element.
如何遍历所有返回的跨度并检查它们是否都具有 my-class
属性?
提前致谢!
在 jQuery 中,要遍历元素集合,.each()
很有用。它将是:
$("#myID > div > div > div > p > a > span").each(function(){
if($(this).hasClass("my-class")){
console.log("Found one!");
}
});
但是,我猜你需要在 Groovy 中使用一个衬垫...所以试试这个:
$("#myID").find(".my-class")
这将定位您要查找的元素。
请注意 .contains()
不适合在 class 属性中查找 class。所以你的错误可能是因为误用而引发的。
免责声明:我不知道 Groovy,所以我不确定您需要什么。
您还可以检查
assert $("#myID > div > div > div > p > a > span").length === $("#myID > div > div > div > p > a > span.my-class").length
同样,如果属性选择器不总是 class,您可以使用属性选择器。
因此,由于您使用 Groovy,您可以使用例如 foreach 来遍历您的元素:
def containsAttr = true
$("#myID > div > div > div > p > a > span").each { element ->
if (! element.attr("class").contains("my-class")) {
containsAttr = false
}
}
assert containsAttr == true
重要的是您将 $()-Selection 元素识别为一个集合。当您在 groovy 知识上取得进步时,您会发现更有趣的方法来遍历集合,但我认为目前,each
循环最能说明如何完成。
有关集合的更多详细信息,请参阅http://docs.groovy-lang.org/next/html/documentation/working-with-collections.html。
PS: 我给出的代码的一个缺点是断电失败时不会显示太多信息。
嗨,我是 Groovy 的新手。
我想深入 DOM 结构并检索一组元素并检查这些元素是否具有特定属性。
下面是我用来检查属性的语句-
assert $("#myID > div > div > div > p > a > span").attr("class").contains("my-class")
$("#myID > div > div > div > p > a > span")
returns 3 个跨度元素,因此上述语句失败并抛出错误 -
geb.error.SingleElementNavigatorOnlyMethodException: Method getAttribute(java.lang.String) can only be called on single element navigators but it was called on a navigator with size 3. Please use the spread operator to call this method on all elements of this navigator or change the selector used to create this navigator to only match a single element.
如何遍历所有返回的跨度并检查它们是否都具有 my-class
属性?
提前致谢!
在 jQuery 中,要遍历元素集合,.each()
很有用。它将是:
$("#myID > div > div > div > p > a > span").each(function(){
if($(this).hasClass("my-class")){
console.log("Found one!");
}
});
但是,我猜你需要在 Groovy 中使用一个衬垫...所以试试这个:
$("#myID").find(".my-class")
这将定位您要查找的元素。
请注意 .contains()
不适合在 class 属性中查找 class。所以你的错误可能是因为误用而引发的。
免责声明:我不知道 Groovy,所以我不确定您需要什么。
您还可以检查
assert $("#myID > div > div > div > p > a > span").length === $("#myID > div > div > div > p > a > span.my-class").length
同样,如果属性选择器不总是 class,您可以使用属性选择器。
因此,由于您使用 Groovy,您可以使用例如 foreach 来遍历您的元素:
def containsAttr = true
$("#myID > div > div > div > p > a > span").each { element ->
if (! element.attr("class").contains("my-class")) {
containsAttr = false
}
}
assert containsAttr == true
重要的是您将 $()-Selection 元素识别为一个集合。当您在 groovy 知识上取得进步时,您会发现更有趣的方法来遍历集合,但我认为目前,each
循环最能说明如何完成。
有关集合的更多详细信息,请参阅http://docs.groovy-lang.org/next/html/documentation/working-with-collections.html。
PS: 我给出的代码的一个缺点是断电失败时不会显示太多信息。