2

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

一些背景:

我公司使用的 Selenium 框架仅允许您使用保存为对象的 X 路径,然后您使用预先存在的方法,如“click(someobject)”或“enter(someobject)”等...

问题:

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

`//*[@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。但这似乎不是他们想要走的路……

可能的解决方案:

  • 是否可以缩小硒的“范围”?
    例如,告诉 Selenium 查看特定类而不是整个页面?
    - 我的想法是让它搜索一个类,匹配一个特定的文本,然后选择 Set。
  • 如果是的话,那么也有可能组合多个X路径的 东西......

    //div[@class='col-sm-4'].... //div[contains(.,'Birth Date: Set +')]

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

  1. 寻找班级
  2. 搜索文本“出生日期”
  3. 选择设置按钮

以下是一些图片: 前端

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

4

3 回答 3

1

你会想要这样的东西:

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

意思是从div具有classwith 值col-sm-4并包含指定文本的链接中选择链接。

或者它也可以这样工作:

//div[contains(text(), 'Birth Date')]/a
于 2017-02-06T22:38:47.630 回答
1

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

但这里有多种解决方案:

  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 的更多信息。

于 2017-02-06T23:52:29.623 回答
1

为了首先找到具有类 'col-sm-4' 和文本为 'Birth Date:' 的div,然后在其下找到带有文本 '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]
于 2017-02-07T03:13:32.230 回答