使元素定位器唯一

我是一名使用eclipse练习自动化的Selenium学习者,我正在通过以下前两个步骤来自动化测试用例:

Go to http://automationpractice.com/index.php
Verify -5% displayed on product 'Printed Summer Dress'

第二步,我遇到以下问题: 我无法为网页上的-5%元素创建唯一的定位器。我尝试了不同的元素定位器,但是在“检查”元素控制台的“按字符串,选择器或Xpath查找”搜索栏中,这些定位器带来了多个结果,例如8个结果中的1个或4个结果中的1个。确保使用唯一的元素定位器,以便在运行测试时获得完全验证的结果。

这是元素:

<span class="price-percent-reduction">-5%</span>

据我所知,除class之外没有其他元素属性,因此我无法使用替代属性。

注意:这既不是家庭作业,也不是课堂作业,而是我自己的实践。

我尝试使用以下定位器,但没有一个得到1个结果中的1个,这意味着它们不是唯一的。

CSS --> span.price-percent-reduction
CSS --> span[class='price-percent-reduction']
XPath --> //span[text()='-5%']
XPath --> //span[@class='price-percent-reduction']

我在Stack Overflow上搜索了类似的问题,但是找不到与我自己的匹配的问题。

tuxiangzhen 回答:使元素定位器唯一

您的正确假设是,定位<span class="price-percent-reduction">将返回多个元素。您似乎正在尝试在页面上找到特定产品,并且价格降低了。因此,您需要在所需产品的上下文中找到span

这是一个扩展的XPath,它查看产品标题并根据该价格获取折扣百分比:

//ul[@id='homefeatured']//div[h5/a[@title='Printed Chiffon Dress']]/div/span[@class='price-percent-reduction']

此选择器返回1个结果-20%,这是产品Printed Chiffon Dress的折扣百分比。

这可以概括为:

//ul[@id='homefeatured']//div[h5/a[@title='product title here']]/div/span[@class='price-percent-reduction']

XPath可以细分如下:

该网站有两个产品列表-“热门”和“最畅销”这两个产品列表具有重复的产品-一些“热门”产品也在最畅销列表中。为了检索单个产品元素,我们需要指定列表。上面的XPath指定由//ul[@id='homefeatured']子句指示的'Popular'列表。请注意,您可以将其更改为//ul[@id='blockbestsellers'],以从“最佳卖家”列表中进行选择。

//ul[@id='homefeatured']上选择之后,我们使用出现在子句title中的//div[h5/a[@title='product title here']]属性来查询列表中的产品。该查询告诉我们搜索包含标题div的包含product title here元素的路径。

一旦根据产品名称选择了产品,我们就可以查询价格降低的百分比,即条款的/div/span[@class='price-percent-reduction']部分。

使用生成的XPath,您可以将product title here更改为Printed Chiffon Dress或任何其他项目的标题,并获得该产品下显示的%off(-5%)值。

值得注意的是-我在Google Chrome浏览器中使用了XPath帮助程序扩展,因此我可以实时测试大多数XPath,并且可以编写复杂的评估,例如我上面编写的路径。这就是我用来根据您提供的网站URL测试此XPath的机制。

,

要获取减少量-5%的唯一元素,请使用以下xpath。

//ul[@id='homefeatured'][.//a[@title='Printed Summer Dress']]//div[@class='right-block']//span[@class='price-percent-reduction'][text()='-5%']

得出WebDriverWaitvisibilityOfElementLocated()

WebDriverWait wait = new WebDriverWait(driver,20); 
WebElement itempricediscount=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//ul[@id='homefeatured'][.//a[@title='Printed Summer Dress']]//div[@class='right-block']//span[@class='price-percent-reduction'][text()='-5%']")));
System.out.println(itempricediscount.getText());
,

这是一个css:

#homefeatured > li:nth-child(5) .left-block .price-percent-reduction

我要做的是在chrome元素面板中搜索它,并一直保持下去,直到有独特之处

本文链接:https://www.f2er.com/3122184.html

大家都在问