select_list xpath for date dropdowns without unique class names or ids

xpath for select_list for date dropdowns without unique class names or ids

如果 select_list 用于出生日期并具有三个下拉列表怎么办:

例如

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

谢谢!!

使用 contains 函数你可以做到这一点。

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

编辑:OP 添加屏幕截图后的新选择器 您需要做的就是等待元素存在(不可见)并传递所需国家[=15=的选项值 ]

下面的xpath应该直接找到那个select标签的选项

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

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

三个 select 列表可以通过它们的数据绑定属性找到:

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

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

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 更容易阅读并且更不容易出错。