使用带有c#的webdriver如果下拉菜单不是select元素,如何按文本选择下拉项?

时间:2014-08-08 15:44:14

标签: c# selenium selenium-webdriver webdriver

我有以下代码块:

<div id="rtmenu"><span class="rt-combobox"><input name="" type="text" autocomplete="off" label="" placeholder="" class=""><span class="rt-combobox-button" style="-webkit-user-select: none;">▼</span><div class="menu-vertical" role="menu" aria-haspopup="true" style="-webkit-user-select: none; left: 342px; top: 357px; display: none;"><div class="rt-menuitem" role="menuitem" id=":l" style="-webkit-user-select: none;"><div class="rt-menuitem-content">Cars</div></div><div class="rt-menuitem" role="menuitem" id=":m" aria-hidden="false" style="-webkit-user-select: none;"><div class="rt-menuitem-content">Motorcycles</div></div></div></span></div>

我想要做的是按照文本(或值)选择菜单项“汽车”和“摩托车”。我可以通过xpath或ID轻松获取它们,但问题是它们的ID经常更改,并且新项目会添加到列表中,这样也会破坏我的xpath。

我尝试使用“选择”,但此下拉菜单不是传统意义上的选择菜单。

非常感谢任何帮助。谢谢大家

p.s我正在使用c#

1 个答案:

答案 0 :(得分:0)

我不熟悉c#,但我可以建议一两种方法。

由于它不是选择标记,在所有情况下您都必须模仿真实用户的操作,例如点击 - 等到选项列表显示 - 找到所需选项 - 点击它

  1. 您可以使用xpath定位器.//div[text()='Cars']直接获取所需选项
  2. 您可以遍历所有可用选项的列表,检查其文本是否等于所需选项,如果是 - 单击元素并中断循环
  3. 您已经提到由于新ID和列表中的项目导致您的定位器无效,因此ypu需要使用此类定位器,在这种情况下不依赖于ID或索引。顺便说一句,在xpath中使用索引是可怕的,恕我直言