如何使用 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();
      }

}