Selenium 当id和xpath是动态的时,如何识别并单击按钮

Selenium 当id和xpath是动态的时,如何识别并单击按钮,selenium,selenium-webdriver,Selenium,Selenium Webdriver,在一个页面上,将显示多个产品,每个产品都有“添加到购物车”选项 页面上显示的产品是动态的,XPath/ID不断变化。我想找到一个特定的产品,然后单击添加到购物车。如何查找产品并将其添加到购物车 以下是页面显示多个产品的一个示例: www1.macys.com/shop/product/hotel collection现代柳叶刀床上用品系列?ID=1121719,类别ID=7502 提前感谢在每个产品的div中搜索您的产品,并从中执行您需要的操作。您可以使用以下代码: public void te

在一个页面上,将显示多个产品,每个产品都有“添加到购物车”选项

页面上显示的产品是动态的,XPath/ID不断变化。我想找到一个特定的产品,然后单击添加到购物车。如何查找产品并将其添加到购物车

以下是页面显示多个产品的一个示例: www1.macys.com/shop/product/hotel collection现代柳叶刀床上用品系列?ID=1121719,类别ID=7502


提前感谢

在每个产品的div中搜索您的产品,并从中执行您需要的操作。您可以使用以下代码:

public void test(String product) {
    driver.get("http://www1.macys.com/shop/product/hotel-collection-modern-lancet-bedding-collection?ID=1121719&CategoryID=7502#bottomArea");
    product = "Hotel Collection Lancet 14\" x 26\" Decorative Pillow";

    List<WebElement> listProduct = driver.findElements(By.xpath("//*[contains(@id,'member') and contains(@class,'memberProducts')]")); //List which has all the product description and buttons.
//Iterate each element for the title with required product.
    for(WebElement eachElem:listProduct){
        String tmp = eachElem.findElement(By.xpath("//div[@class='memberUPCDetails']/img")).getAttribute("title"); //Get the title of nth element.
        if (tmp.equals(product)){ 
            WebElement button = eachElem.findElement(By.xpath("//img[@class='addToBagButton']")); 
            button.click(); //If title matches click on button for same element.
            break; //Break out of iteration.
        }
    }
}
公共无效测试(字符串产品){
驱动程序。获取(“http://www1.macys.com/shop/product/hotel-collection-modern-lancet-bedding-collection?ID=1121719&CategoryID=7502#bottomArea");
product=“酒店系列Lancet 14\”x 26\”装饰枕头;
List listProduct=driver.findelelements(By.xpath(“//*[contains(@id,'member')和contains(@class,'memberProducts')]);//包含所有产品说明和按钮的列表。
//使用所需产品迭代标题的每个元素。
for(每个Web元素:listProduct){
字符串tmp=eachElem.findelelement(By.xpath(“//div[@class='memberUPCDetails']]/img”).getAttribute(“title”);//获取第n个元素的标题。
如果(tmp.equals(乘积)){
WebElement button=eachElem.findElement(By.xpath(“//img[@class='addToBagButton']);
button.click();//如果标题匹配,请单击同一元素的按钮。
break;//中断迭代。
}
}
}

此代码适用于第一个产品。如果我想添加第二个产品,它将不起作用。for循环中提供的“Hotel Collection Lancet 18 \“Square装饰枕头”XPath不正确。它们返回当前文档中的所有节点。因此,它总是添加第一个产品。我将for循环中的XPath更改为下面的XPath,它正在工作。div[@class='memberUPCDetails']/img div/img[@class='addToBagButton']谢谢你,我很高兴能帮上忙:)我的名字是胡萨姆:P