我在很长一段时间后在(任何战斗预订搜索引擎 - MMT 作为参考)上练习 Xpath 创建,并且很少有与动态 xpath 相关的查询。我的查询如下
//div[@class="clusterContent"]/div/div[3]/div/div[2]/div/div//following::div/p[2]
//div[@class='clusterContent']/div
会给我行项目列表,将其存储在列表中,我将迭代下面的xpath直到这个大小。
@FindBy(xpath="//div[@class='clusterContent']")
List<WebElement> totalNoFlight;
public void getFlightCount()
{
int size = totalNoFlight.size();
for(int i=0;i<size;i++)
{
WebElement videoCliplnk = driver
.findElement(By.xpath("//div[@class='clusterContent']/div/div["+i+"]/div/div[2]/div/div//following::div/p[2]"));
String videoLinkhrs = videoCliplnk.getText();
}
}
这是在POM页面工厂设计模式中编写这些动态xpath之王的正确方法吗?
航空公司名称似乎通过类别名称具有唯一的定位器。
卡片定位器是包含类
listingCard
的元素。
名称容器定位器是包含类
airline-info-wrapper
的元素。
最后,航空公司名称是元素,其中类别之一是
airlineName
。
所以,你得到了结果:
//*[contains(@class,'listingCard ')]//*[contains(@class, 'airline-info-wrapper')]//*[contains(@class,'airlineName')]
如果你不关心容器根,它可以更短 - 只是
//*[contains(@class,'airlineName')]
但是如果您不仅关心名称,您还需要获取卡片容器列表
//*[contains(@class,'listingCard ')]
,循环遍历它并获取所需的信息。
//div[@class="clusterContent"]/div/div[3]/div/div[2]/div/div//following::div/p[2]
以上 XPath 表达式不正确。它找到了 144 个元素(见下面的截图)。
要定位/获取搜索结果的第三行,您可以使用以下 XPath 表达式:
(//div[@class='makeFlex spaceBetween'])[3]
-- 这将返回搜索结果的第三行 <div>
。只需更改第三行的最后一位数字 3
,第四行的 4
,依此类推。
(//div[@class='makeFlex spaceBetween'])[3]//p
-- 这将返回第三行的所有 <p>
节点。