我搜索了一种类型为"的移动产品。华硕Zenfone 5" 在 flipkart.com 网站上,搜索显示很多产品。我选择了第一个产品并将其添加到购物车中。
以下是我的代码:
@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);
}
我的代码中一切正常。
现在我的疑问是,检查所选产品和添加的产品是否相同。购物车中的产品名称与搜索结果中的第一个产品名称不同。我们只能检查产品名称是否相同。除此之外,还有其他选择吗?那么我们如何检查所选产品是否与购物车中的产品相同?
答案 0 :(得分:0)
在产品详细信息页面中选择产品后,获取页面标题并将其存储在字符串
中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在印度的价格 - 购买Asus Zenfone 5 Black 8 Online - 华硕:Flipkart.com"通过这种方式,您可以100%确定该产品是您选择的同一产品。您还可以在详细信息页面中查看价格并将其与购物车页面进行比较
您还可以获得产品属性"黑色,8 GB,1.2 GHz处理器"在详细页面中,并将其与购物车页面进行比较
//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);
修改:
如果您查看购物车页面的页面来源,则无法通过在产品页面和购物车页面bcoz中使用名称进行比较,并且#34; Asus A501CG-2A508WWE / A501CG-2A584WWE Zenfone ..."即使我们写一个正则表达式并得到名称ex:华硕zenfone我们也不能得到全名华硕Zenfone 5所以这将不是正确的检查程序。只在订单摘要部分出现后下订单(点击查看购物车页面中的下订单按钮),您将能够使用名称" Asus Zenfone 5"进行验证。
关于我的解决方案的说明:
第1步:在搜索页面中,您点击第一个产品(asus zenfone 5)
第2步:选择页面将重新加载的颜色或存储等功能后,您将被重定向到此处所选产品的详细信息页面,然后获取页面标题后,它将像例如:Asus Zenfone 5价格在印度 - 购买华硕Zenfone 5 Red 8 Online - 华硕:Flipkart.com和其他功能(如颜色,存储和处理器选择),卖家名称
第3步:点击添加到购物车按钮,然后转到购物车页面
第4步:在购物车页面中,验证是否存在检查名称的所有功能,您唯一能做的就是点击产品图片并在新标签页中打开它然后再次获得标题并将其与我们在将产品添加到购物车之前获得的先前标题进行比较。因此您可以验证您添加了正确的产品。
您还可以保留另一项检查以验证添加的产品是否相同,例如在将产品添加到购物车之前获取产品的产品ID,并在购物车页面中获取 pid 属性url并比较它们
希望这可以帮助你...如果你有任何疑问,请回来
答案 1 :(得分:0)
我同意您的意见,只是产品名称不能用于区分不同的产品,因为许多产品可能具有相同或相似的名称,并且可能无法提供预期的结果。
尝试使用产品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,您可能需要将其设置为静态,以便测试不会失败。
如果您有任何疑问,请与我们联系。
答案 2 :(得分:0)
我认为带有手机型号的标题会显示在购物车页面中,而在“商品详情”页面中,只会显示手机的标题。
因此,如果你想比较这两个标题: -
//Product Details page.
Title is = Asus Zenfone 5.
String product = driver.findElement(By.xpath("//*[@itemprop='name']")).getText();
注意: - 页面的差异是"添加到购物车"按钮已启用,您可以单击它。
//购物车页面 点击移动图片图标后,标题为= Asus Zenfone 5。 点击小型移动图片图标,它将转到更大的页面。然后你可以拿到标题。
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);
我希望这会对你有所帮助。