在Selenium中选择不同的Web元素

时间:2017-02-06 21:55:38

标签: selenium xpath automation qa qwebelement

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

某些背景:

我公司使用的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 +')]

我的想法是,我可以创建一个缩小Selenium实际上会看到的Xpath。

  1. 正在搜索课程
  2. 搜索文本“出生日期”
  3. 选择设置按钮
  4. 以下是一些图片: FRONT END

    当我检查页面时,这是一些HTML HTML CODE

3 个答案:

答案 0 :(得分:1)

你会想要这样的东西:

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

含义选择div的{​​{1}}的链接,其中class的值为col-sm-4且包含指定的文字。

或者它也可以这样工作:

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

答案 1 :(得分: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

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

答案 2 :(得分:1)

首先找到带有'col-sm-4'类的 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]