选择不同的 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 添加到每个按钮。但这似乎不是他们想要走的路...
可能的解决方案:
是否可以缩小 Selenium 的“范围”?
例如告诉 Selenium 查看特定的 class 而不是整个页面?
-我的想法是让它搜索一个class,匹配一个特定的文本,然后select设置。
如果是,那么是否也可以合并多个X路径
像....
//div[@class='col-sm-4'].... //div[contains(.,'Birth Date: Set +')]
我的想法是我可以创建一个 Xpath 来缩小 Selenium 实际查看的范围。
正在搜索 class
正在搜索文本“出生日期”
选择设置按钮
以下是一些图片:
这是我检查页面时的一些 HTML
你会想要这样的东西:
//div[@class='col-sm-4'][.//*[contains(text(), 'Birth Date')]]//a
意思是 select 来自 div
的 link 有一个 class
值 col-sm-4
并且包含指定的文本。
或者它也可以这样工作:
//div[contains(text(), 'Birth Date')]/a
我相信你已经问过这个问题,我们已经回答了。
但这里有多种解决方案:
//div[@class='col-sm-4' and contains(text(),'Birth Date')]/div/a
//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]
我是一名软件质量保证工程师,我正在尝试为网页创建自动化测试。
一些背景:
我公司使用的 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 添加到每个按钮。但这似乎不是他们想要走的路...
可能的解决方案:
是否可以缩小 Selenium 的“范围”?
例如告诉 Selenium 查看特定的 class 而不是整个页面?
-我的想法是让它搜索一个class,匹配一个特定的文本,然后select设置。如果是,那么是否也可以合并多个X路径 像....
//div[@class='col-sm-4'].... //div[contains(.,'Birth Date: Set +')]
我的想法是我可以创建一个 Xpath 来缩小 Selenium 实际查看的范围。
正在搜索 class
正在搜索文本“出生日期”
选择设置按钮
以下是一些图片:
这是我检查页面时的一些 HTML
你会想要这样的东西:
//div[@class='col-sm-4'][.//*[contains(text(), 'Birth Date')]]//a
意思是 select 来自 div
的 link 有一个 class
值 col-sm-4
并且包含指定的文本。
或者它也可以这样工作:
//div[contains(text(), 'Birth Date')]/a
我相信你已经问过这个问题,我们已经回答了。
但这里有多种解决方案:
//div[@class='col-sm-4' and contains(text(),'Birth Date')]/div/a
//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]