我需要获取第一个类头和第二个类头之间的行数,以便在for循环中用作增量。这是html的一个例子:
<div class="datagrid-ready" range="0:49" chunk-id="0.0" style="width:100%;height:2220px;" enabled="true">
<div class="categoryHeader" template="group" row-id="0">...</div>
<div class="productTableRow" template="row" row-id="1">...</div>
<div class="productTableRow" template="row" row-id="2">...</div>
<div class="productTableRow" template="row" row-id="3">...</div>
<div class="productTableRow" template="row" row-id="4">...</div>
<div class="productTableRow" template="row" row-id="5">...</div>
<div class="categoryHeader" template="group" row-id="6">...</div>
<div class="productTableRow" template="row" row-id="7">...</div>
<div class="categoryHeader" template="group" row-id="8">...</div>
<div class="productTableRow" template="row" row-id="9">...</div>
<div class="productTableRow" template="row" row-id="10">...</div>
<div class="productTableRow" template="row" row-id="11">...</div>
<div class="categoryHeader" template="group" row-id="12">...</div>
<div class="productTableRow" template="row" row-id="13">...</div>
<div class="productTableRow" template="row" row-id="14">...</div>
</div>
到目前为止,这是我放在一起的东西(显然它不起作用):
final int noItemsIn1stCat = driver.findElement(By.xpath("//div[@class='datagrid-ready']/div[contains(@class,'productTableRow')]")).size();
我对如何将5
导入noItemsIn1stCat
感到茫然。
使用css选择器会更容易还是更可靠?
我是java和selenium的新手,所以任何帮助都会完全受到赞赏!
答案 0 :(得分:0)
可以获得包含两个其他兄弟之间的兄弟元素的节点集,计算两个集合的交集。 设置A :第一个元素的跟随兄弟的元素集, Set B :的元素集最后一个元素的兄弟姐妹。
您可以使用Kaysian method选择两个集合之间的交集(请参阅我在评论中发布的链接中的更详细说明)。获得交集的公式是:
SetA [ count( . | setB) = count( setB ) ]
将此问题应用于您的问题,并使用:
SetA = //div[@class='datagrid-ready']
/div[@class='categoryHeader'][1]
/following-sibling::div[@class='productTableRow']
和
SetB = //div[@class='datagrid-ready']
/div[@class='categoryHeader'][2]
/preceding-sibling::div[@class='productTableRow']
你有:
//div[@class='datagrid-ready']
/div[@class='categoryHeader'][1]
/following-sibling::div[@class='productTableRow']
[ count( . | //div[@class='datagrid-ready']
/div[@class='categoryHeader'][2]
/preceding-sibling::div[@class='productTableRow'])
= count( //div[@class='datagrid-ready']
/div[@class='categoryHeader'][2]
/preceding-sibling::div[@class='productTableRow'] ) ]
或一行:
//div[@class='datagrid-ready']/div[@class='categoryHeader'][1]/following-sibling::div[@class='productTableRow'][count(.|//div[@class='datagrid-ready']/div[@class='categoryHeader'][2]/preceding-sibling::div[@class='productTableRow']) = count( //div[@class='datagrid-ready']/div[@class='categoryHeader'][2]/preceding-sibling::div[@class='productTableRow'] ) ]
在您的示例中,此表达式将选择这五个节点:
<div class="productTableRow" template="row" row-id="1">
<div class="productTableRow" template="row" row-id="2">
<div class="productTableRow" template="row" row-id="3">
<div class="productTableRow" template="row" row-id="4">
<div class="productTableRow" template="row" row-id="5">
要计算节点,只需将整个表达式作为参数放入count()
函数:
count(//div[@class='datagrid-ready']/div[@class='categoryHeader'][1]/following-sibling::div[@class='productTableRow'][count(.|//div[@class='datagrid-ready']/div[@class='categoryHeader'][2]/preceding-sibling::div[@class='productTableRow']) = count( //div[@class='datagrid-ready']/div[@class='categoryHeader'][2]/preceding-sibling::div[@class='productTableRow'])])