如何使用 selenium 遍历非 Select 下拉列表?
How to Traverse Non-Select Dropdown using selenium?
我试图在使用 'k-dropdown' 而不是 'select' 作为控件的 KendoUI 下拉菜单中获取所有可用选项。因此,我不能使用类似的东西(因为没有 select 元素):
public void ChooseOrderType(string type)
{
var mySelect = new SelectElement(TypeDropDownLocator);
var options = mySelect.Options;
foreach (var option in options) {
if (option.Text.Equals(type))
option.Click();
}
}
HTML:
<span class="k-widget k-dropdown k-header" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-owns="orderStatus_listbox" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-activedescendant="orderStatus_option_selected">
<span unselectable="on" class="k-dropdown-wrap k-state-default">
<span unselectable="on" class="k-input">All orders</span>
<span unselectable="on" class="k-select">
<span unselectable="on" class="k-icon k-i-arrow-s">select</span>
</span>
</span>
<input id="orderStatus" name="orderStatus" type="text" data-role="dropdownlist" style="display: none;">
</span>
有什么办法可以手动遍历这个得到所有的选项吗?
编辑:我用 JeffC 的方法得到它:
public ViewOrdersPage SearchDraftOrders(string type)
{
TypeDropDownLocator.Click();
Driver.FindElement(By.XPath("id('orderStatus_listbox')/li[2]")).Click();
SearchOrdersButton.Click();
return this;
}
如您所见,您将无法使用 SelectElement
类型。您需要像对待任何其他元素一样对待它。您需要单击类似于 SELECT 的元素以打开下拉列表,然后单击代表您要选择的类似于 OPTION 的元素的元素。您可能需要在两次点击之间稍等片刻,具体取决于下拉菜单打开的速度。
由于没有看到用于下拉菜单和选项的完整 HTML,我无法提供代码,但您可以按照上面的说明自行解决。
我试图在使用 'k-dropdown' 而不是 'select' 作为控件的 KendoUI 下拉菜单中获取所有可用选项。因此,我不能使用类似的东西(因为没有 select 元素):
public void ChooseOrderType(string type)
{
var mySelect = new SelectElement(TypeDropDownLocator);
var options = mySelect.Options;
foreach (var option in options) {
if (option.Text.Equals(type))
option.Click();
}
}
HTML:
<span class="k-widget k-dropdown k-header" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-owns="orderStatus_listbox" aria-disabled="false" aria-readonly="false" aria-busy="false" aria-activedescendant="orderStatus_option_selected">
<span unselectable="on" class="k-dropdown-wrap k-state-default">
<span unselectable="on" class="k-input">All orders</span>
<span unselectable="on" class="k-select">
<span unselectable="on" class="k-icon k-i-arrow-s">select</span>
</span>
</span>
<input id="orderStatus" name="orderStatus" type="text" data-role="dropdownlist" style="display: none;">
</span>
有什么办法可以手动遍历这个得到所有的选项吗?
编辑:我用 JeffC 的方法得到它:
public ViewOrdersPage SearchDraftOrders(string type)
{
TypeDropDownLocator.Click();
Driver.FindElement(By.XPath("id('orderStatus_listbox')/li[2]")).Click();
SearchOrdersButton.Click();
return this;
}
如您所见,您将无法使用 SelectElement
类型。您需要像对待任何其他元素一样对待它。您需要单击类似于 SELECT 的元素以打开下拉列表,然后单击代表您要选择的类似于 OPTION 的元素的元素。您可能需要在两次点击之间稍等片刻,具体取决于下拉菜单打开的速度。
由于没有看到用于下拉菜单和选项的完整 HTML,我无法提供代码,但您可以按照上面的说明自行解决。