select_list的xpath,用于没有唯一类名或id的日期下拉列表

时间:2015-01-07 02:38:01

标签: ruby xpath watir

如果select_list是出生日期并且有三个下拉列表,那该怎么办:

e.g。

select class="custom-select__select" data-bind="customSelect, options: dates, optionsText: 'name', optionsValue: 'id', value: date" style="opacity: 0;"

select class="custom-select__select" data-bind="customSelect, options: months, optionsText: 'name', optionsValue: 'id', value: month" style="opacity: 0;"

select class="custom-select__select" data-bind="customSelect, options: years, optionsText: 'name', optionsValue: 'id', value: year" style="opacity: 0;"

它们仅在数据绑定选项和值属性方面有所不同。

如何为这些人获得正确的xpath

谢谢!

2 个答案:

答案 0 :(得分:0)

使用contains功能可以实现这一目标。

//select[contains(@data-bind,'dates')] #change the data-bind value to month or years or whatever

编辑:OP添加屏幕截图后的新选择器 您需要做的就是使用一些等待元素存在(不可见)并传递所需国家/地区的选项值

以下xpath应直接找到select代码

的选项
//select[contains(@data-bind,'dates')]/option[@value='" + country + "']

答案 1 :(得分:0)

您不必编写XPath,而是可以使用Watir API。

可以通过数据绑定属性找到三个选择列表:

browser.select_list(data_bind: /dates/)
browser.select_list(data_bind: /months/)
browser.select_list(data_bind: /years/)

或者,如果您需要将选择列表的位置限制为特定元素:

browser.element(id: 'hbf-ebs-personalDetails').select_list(data_bind: /dates/)
browser.element(id: 'hbf-ebs-personalDetails').select_list(data_bind: /months/)
browser.element(id: 'hbf-ebs-personalDetails').select_list(data_bind: /years/)

最终这与编写自己的XPath相同,因为Watir从上面的行创建了一个XPath。但是,许多人会发现这比编写XPath更容易阅读,更不容易出错。