如何使用 selenium 为以下 Expedia 网站示例唯一标识元素
How to uniquely identify elements with selenium for below Expedia site example
假设我去 - https://www.expedia.co.uk/
我转到“火车”选项卡并搜索任何有 1 位乘客的日期 selected.
您将在下一页从列表中选择 select 火车,现在如果我想单击任何 ShowFares 按钮未被 CSS= .btn-secondary.btn-action
唯一识别(它返回多个匹配节点。因此无法使用它。
使用 xpath -
.//*[@id='ember968']/div/div[1]/div[2]/div[2]/div/button
我看到它的记录 @id
和一些 emberxxx
这又不是唯一的,因为它在每个其他搜索列表中都发生了变化..
类似地,当我点击 ShowFare 时,无法选择火车或票价,因为 CSS 正在返回多个节点并且 xpath 有这个 emberxxx不是唯一的。
例如,使用 xpath 函数 starts-with
:
(//*[starts-with(@id, 'ember')])[2]
此函数查找名称的一部分。然后你可以使用 filtr by []
通过索引找到需要的元素。
对于相同的属性,我们有多个元素,我们无法选择正确的一个。我尝试使用 jquery 选择器 .btn-secondary.btn-action:eq(1)
并且它正在工作。通过使用上面的选择器,您每次都会首先选择 显示票价 按钮如果您有任何疑问,请告诉我。
CSS 选择器: .flex-1up.flex-listing.flex-theme-light li:nth-child(1) button
我看到有很多其他元素具有相同的 xpath。如果您想单击第一个元素,这是我的建议。
//button[@class='btn-secondary btn-action']/span
- 将其推送到列表,遍历列表并使用 getText()
。如果匹配“Show Fares”,请单击它。
List<WebElement> buttonList = driver.findElements(By.xpath("//button[@class='btn-secondary btn-action']/span"));
for(int i=0; i<=buttonList.size() ; i++){
WebElement ele = buttonList.get(i);
if(ele.getText().contains("Show Fares"){
ele.click();
}
}
假设我去 - https://www.expedia.co.uk/ 我转到“火车”选项卡并搜索任何有 1 位乘客的日期 selected.
您将在下一页从列表中选择 select 火车,现在如果我想单击任何 ShowFares 按钮未被 CSS= .btn-secondary.btn-action
唯一识别(它返回多个匹配节点。因此无法使用它。
使用 xpath -
.//*[@id='ember968']/div/div[1]/div[2]/div[2]/div/button
我看到它的记录 @id
和一些 emberxxx
这又不是唯一的,因为它在每个其他搜索列表中都发生了变化..
类似地,当我点击 ShowFare 时,无法选择火车或票价,因为 CSS 正在返回多个节点并且 xpath 有这个 emberxxx不是唯一的。
例如,使用 xpath 函数 starts-with
:
(//*[starts-with(@id, 'ember')])[2]
此函数查找名称的一部分。然后你可以使用 filtr by []
通过索引找到需要的元素。
对于相同的属性,我们有多个元素,我们无法选择正确的一个。我尝试使用 jquery 选择器 .btn-secondary.btn-action:eq(1)
并且它正在工作。通过使用上面的选择器,您每次都会首先选择 显示票价 按钮如果您有任何疑问,请告诉我。
CSS 选择器: .flex-1up.flex-listing.flex-theme-light li:nth-child(1) button
我看到有很多其他元素具有相同的 xpath。如果您想单击第一个元素,这是我的建议。
//button[@class='btn-secondary btn-action']/span
- 将其推送到列表,遍历列表并使用 getText()
。如果匹配“Show Fares”,请单击它。
List<WebElement> buttonList = driver.findElements(By.xpath("//button[@class='btn-secondary btn-action']/span"));
for(int i=0; i<=buttonList.size() ; i++){
WebElement ele = buttonList.get(i);
if(ele.getText().contains("Show Fares"){
ele.click();
}
}