选择不同的 Web 元素

Selecting Different Web Elements

我是一名软件质量保证工程师,我正在尝试为网页创建自动化测试。

一些背景:

我公司使用的 Selenium 框架只允许您使用保存为对象的 X 路径,然后您可以使用预先存在的方法,如“单击(某些对象)”或“输入(某些对象)”等

问题:

我目前正在尝试创建一个 select 多个按钮位于同一个 class 上的测试。我需要设置 6 个按钮 select。现在我可以做到这一点,但使用:

`//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[1]/div/a
 //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[2]/div/a
 //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[3]/div/a
 //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[4]/div/a
 //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[5]/div/a
 //*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[6]/div/a`

-但这只是临时的,因为当按钮被移除时测试将在以后失败......我已经与开发团队讨论了将唯一 ID 添加到每个按钮。但这似乎不是他们想要走的路...

可能的解决方案:

我的想法是我可以创建一个 Xpath 来缩小 Selenium 实际查看的范围。

  1. 正在搜索 class

  2. 正在搜索文本“出生日期”

  3. 选择设置按钮

以下是一些图片:

这是我检查页面时的一些 HTML

你会想要这样的东西:

//div[@class='col-sm-4'][.//*[contains(text(), 'Birth Date')]]//a

意思是 select 来自 div 的 link 有一个 classcol-sm-4 并且包含指定的文本。

或者它也可以这样工作:

//div[contains(text(), 'Birth Date')]/a

我相信你已经问过这个问题,我们已经回答了。

但这里有多种解决方案:

  1. //div[@class='col-sm-4' and contains(text(),'Birth Date')]/div/a

  2. //div[contains(@class,'col-sm-4') and contains(text(),'Birth Date']//a

还有更多选择。尝试访问 w3schools.com 以了解有关 xpath 的更多信息。

为了首先找到 div class 'col-sm-4' 和文本 'Birth Date:' 然后找到 link 下有文本 'Set +',可以使用以下任何 XPATH:

//div[@class='col-sm-4' and contains(text(),'Birth Date')]/descendant::a[1]

或者

//div[@class='col-sm-4' and contains(text(),'Birth Date')]/descendant::a[contains(text(),'Set +')][1]

或者

//div[@class='col-sm-4' and contains(text(),'Birth Date')]/descendant::a[text()='Set +'][1]