检查所选产品和添加到购物车的产品是不是相同

Posted

技术标签:

【中文标题】检查所选产品和添加到购物车的产品是不是相同【英文标题】:Check Selected Product and product which is added to cart are same or not检查所选产品和添加到购物车的产品是否相同 【发布时间】:2015-10-17 12:07:57 【问题描述】:

我在 flipkart.com 网站上搜索了类型为 “Asus Zenfone 5” 的移动产品,搜索显示许多产品。我选择了第一个产品并将其添加到购物车。

下面是我的代码:

 @Test
 public void flipkartScript() throws InterruptedException 

    driver.get("http://www.flipkart.com/");
    driver.findElement(By.id("fk-top-search-box")).sendKeys("Asus Zenfone 5");
    driver.findElement(By.xpath("//input[@value='Search']")).click();

    // Selecting first product
    driver.findElement(By
        .xpath(".//*[@id='products']/div/div[1]/div[1]/div/div[1]/a[1]"));
    String name = driver.findElement(By.className("title")).getText();
    String price = driver.findElement(By
        .xpath("//span[@class='selling-price omniture-field']")).getText();
    System.out.println("ProductName: "+name + "  ProductPrice: "+price);

    //Adding selected product to cart
    driver.findElement(By.xpath("//input[@value='Add to Cart']")).click();
    Thread.sleep(3000);

    //Checking product is available in cart or not
    driver.findElement(By.xpath("//span[@class='cart-label']")).click();
    Thread.sleep(5000);

我的代码一切正常。

现在我的疑问是,检查 Selected product 和 added product 是否相同。购物车中的产品名称与搜索结果中的第一个产品名称不同。我们只能检查产品名称是否相同。除此之外,还有其他选择吗?那么我们如何检查选择的产品是否与购物车中的产品相同呢??

【问题讨论】:

您想检查选择添加到购物车的产品和实际添加到购物车的产品是否相同。是吗? 是的。我的搜索结果中的第一个产品也是如此。 【参考方案1】:

在产品详情页面选择产品后,获取页面标题并将其存储在字符串中

String product_title=driver.getTitle();

在购物车页面中将产品添加到购物车后,单击购物车中的产品图片(您也可以在另一个选项卡中执行此操作)

driver.findElement(By.xpath("//div[contains(@class,'carty-image')]/a/img")).click();

Assert.assertEquals(product_title, driver.getTitle());

我们正在比较两个标题。在您的情况下,它应该是“Asus Zenfone 5 Price in India - Buy Asus Zenfone 5 Black 8 Online - Asus : Flipkart.com”通过这种方式,您可以 100% 确定该产品是您选择的同一产品。您也可以在详细信息页面查看价格并与购物车页面进行比较

您还可以在详细页面获取产品属性“Black, with 8 GB, with 1.2 GHz Processor”并与购物车页面进行比较

//product detail page
String detail_page=driver.findElement(By.xpath("//span[@class='subtitle']")).getText();
//cart page     
String cart_page=driver.findElement(By.xpath("//p[contains(@class,'fk-font-11')]")).getText();
Assert.assertEquals(detail_page, cart_page); 

编辑

如果您查看购物车页面的页面来源名称是“Asus A501CG-2A508WWE/A501CG-2A584WWE Zenfone...”,即使我们编写正则表达式,您也无法在产品页面和购物车页面 bcoz 中使用名称进行比较并获得名称 ex : Asus zenfone 我们将无法获得全名 Asus Zenfone 5,因此这不是正确的检查程序。仅在下订单后出现的订单摘要部分中(单击下订单按钮在查看购物车页面)您将能够使用名称“Asus Zenfone 5”进行验证。

关于我的解决方案的说明

第 1 步:在搜索页面中点击第一个产品(华硕 zenfone 5)

第 2 步:选择颜色或存储等功能后,您将被重定向到您在此处选择的产品的详细信息页面,页面将重新加载,然后获得页面标题,它将像例如:Asus Zenfone 5 印度价格 - 在线购买 Asus Zenfone 5 Red 8 - Asus:Flipkart.com 和其他功能(如颜色、存储和处理器选择),卖家名称

第三步:点击加入购物车按钮,进入购物车页面

第 4 步:在购物车页面中验证是否存在所有用于检查名称的功能,您唯一可以做的就是单击产品图片并在新标签页中打开它,然后然后再次获取标题并将其与我们在将产品添加到购物车之前获得的上一个标题进行比较。这样您就可以验证您是否添加了正确的产品。

您还可以保留另一项检查以验证添加的产品是否相同,例如在将产品添加到购物车之前获取产品的产品 ID,并在购物车页面中获取 pid 属性url 并比较它们

希望这对您有所帮助...如果您有任何疑问,请回复

【讨论】:

其他产品的详细信息也可能相同。因此,与细节进行比较不是办法。它可能会导致相同的产品。但产品可能因具有相同的功能而有所不同。 @SarithaG 我找不到你。如果单击时的产品重定向到正确的详细信息页面,您可以 100% 确定这是您选择的产品,因为多个产品不能具有相同的详细信息页面,并且实际上在上述代码中提出您关于功能的问题,我们也在验证功能“黑色,8 GB,1.2 GHz 处理器“通过与购物车页面进行比较。例如:如果选择红色,16 GB,它将在详细信息和购物车页面中显示,如“红色,16 GB,1.6 GHz 处理器” " 此功能可能与其他名称不同的产品相同。因此,与细节进行比较是不正确的方法。 但实际上在这种情况下,如果您注意到“Asus Zenfone 5 印度价格 - 在线购买 Asus Zenfone 5 Black 8 - Asus : Flipkart.com”,我们也会使用标题来比较名称。说有多个产品使用相同的标题?。如果是关于卖家,那么您可以在产品页面中获取卖家名称并将其与购物车页面进行比较? 是的,我们还必须与名称进行比较。但这里的名称不同。这就是我在我的问题中提出的问题。名字不一样,你怎么能跟名字比较呢?【参考方案2】:

我认为带有手机型号的标题显示在购物车页面中,而在产品详细信息页面中,仅显示手机的标题。

所以如果你想比较两个标题:-

//Product Details page.
Title is = Asus Zenfone 5.
String product = driver.findElement(By.xpath("//*[@itemprop='name']")).getText();

注意:- 页面的不同之处在于“添加到购物车”按钮已启用,您可以单击它。

//购物车页面 单击移动图像图标后,标题为 = Asus Zenfone 5。 单击小的移动图像图标,它将进入更大的页面。然后你就可以拿到Title了。

driver.findElement (By.xpath("//*[@class='carty-image fk-text-center fk-position-relative']/a/img")).click();
String cart = driver.findElement(By.xpath("//*[@class='title   Hover']")).getText();

注意:- 页面中的区别是“添加到购物车”按钮被禁用,因为我们已经将项目添加到购物车。

现在你可以比较了。

Assert.assertEquals(product, cart); 

希望对你有帮助。

【讨论】:

如果购物车中有超过 100 个产品。那么我们不能通过点击每个产品来检查..对吗?【参考方案3】:

我同意您的观点,不能仅使用产品名称来区分不同的产品,因为许多产品可能具有相同或相似的名称,这可能无法为您提供预期的结果。

改用产品 ID。使用代码比较产品 ID。

driver.findElement(By.xpath("//*[@id='products']/div/div[1]/div[1]/div"))
      .getAttribute("data-pid")     //Id from first product in search result

driver.findElement(By.xpath("//*[@class='compare-items']/div[1]"))
      .getAttribute("item_id"))    //Id from product added to cart

此外,您的代码中似乎很少有动态 XPath,您可能需要将其设为静态,以免测试失败。

如果您有任何疑问,请告诉我。

【讨论】:

那个 ID 会返回什么?? @SarithaG 如果您搜索“Asus Zenfone 5”,您将获得 MOBE3HYEBFRKHRGG 作为搜索名称为“Asus Zenfone 5(黑色,8 GB,1.2 GHz 处理器)”和一个在购物车上。 @SarithaG 上述解决方案对您有用吗?如果您还有其他疑问,我可以帮忙吗?

以上是关于检查所选产品和添加到购物车的产品是不是相同的主要内容,如果未能解决你的问题,请参考以下文章

如何检测数组中的相同元素并总结数量?

无法将相同的产品添加到购物车

问题在Opencart的添加与产品添加到购物车按钮

产品在购物车中时显示数量标签(Swift 5)

在 zen 购物车中添加商店名称以及产品

查找用户购物车表中的所有产品并检查产品是不是在已保存项目表中