如何在Selenium中使用Telerik下拉列表?

时间:2013-11-04 15:02:31

标签: c# selenium telerik webdriver selenium-webdriver

我刚开始使用Selenium Webdriver。 但我被Telerik垮掉了。

我无法使用SelectElement,因为下拉列表出现在span元素中。 如何阅读下拉列表中的所有可用选项,然后进行选择。

添加更多信息: 下拉列表由JSON / JQuery填充。 HTML示例如下。 span元素之间的文本根据您从下拉列表中选择的内容而变化。下拉列表中的所有选项都不会在生成的HTML中的任何位置提供。

<div class="t-dropdown-wrap t-state-default">
<span class="t-input">To be approved</span>

我的猜测是我必须执行javascript。不确定如何去做。

1 个答案:

答案 0 :(得分:4)

您的问题分为两部分:

  1. 通常:在其他WebElements中选择Web元素
  2. 具体来说:阅读下拉列表中的所有选项并选择其中一个选项

在回答时,我假设您有一个名为“Driver”的WebDriver对象。

在其他Web元素中选择Web元素

首先,我不确定您提到SelectElement的原因 - 我相信您想要的方法是FindElement()
您可以从任何SearchContext调用FindElement()。 WebDriver对象是一个SearchContext,因此您可以(理论上)通过调用Driver.FindElement()在页面的任何位置找到WebElement。
WebElement本身一个SearchContext,因此您也可以从已经找到的WebElement中调用.FindElement()。这对于将搜索范围从整个页面缩小到特定元素内非常有用。

读取下拉列表中的所有选项并选择其中一个

我查了一个Telerik Dropdown的例子,看看你可能正在处理什么。我找到了一个 here

首先,您需要通过单击向下箭头图标打开下拉列表。似乎图标的编码如下:

<span class="rddlIcon"></span>

如果页面上只有其中一个,您可以找到它并单击它:

Driver.FindElement(By.ClassName("rddlIcon")).Click();

似乎Dropdown代码如下所示:

<ul class="rddlList">
   <li class="rddlItem">Item One</li>
   <li class="rddlItem">Item Two</li>
   <li class="rddlItem">Item Three</li>
</ul>

您要在此处选择&lt; ul&gt; WebElement,然后从那里找到你想要的列表项。

WebElement List = Driver.FindElement(By.ClassName("rddlList"));
//Get Item Three
WebElement Item = List.FindElement(By.XPath("//li[text()='Item Three']");
Item.click();