我刚开始使用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。不确定如何去做。
答案 0 :(得分:4)
您的问题分为两部分:
在回答时,我假设您有一个名为“Driver”的WebDriver对象。
首先,我不确定您提到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();