Selenium C#下拉列表选择值

时间:2015-04-24 16:01:56

标签: c# html selenium xpath drop-down-menu

我在使用C#上的Selenium WebDriver填充下拉列表时遇到问题。

以下是HTML代码:

<div class="chosen-container chosen-container-single chosen-container-single-nosearch" style="width: 278px;" title="" id="phmain_0_phcontent_4_ddlJobType_chosen">
    <a tabindex="-1" class="chosen-single">
        <span>Fabricator</span>
        <div><b></b></div>
    </a>
    <div class="chosen-drop">
    <div class="chosen-search">
        <input type="text" autocomplete="off" readonly=""></div>
        <ul class="chosen-results">
            <li class="active-result" style="" data-option-array-index="1">Fabricator</li>
            <li class="active-result" style="" data-option-array-index="2">Postformer</li>
            <li class="active-result" style="" data-option-array-index="3">Retailer</li></ul>
        </div>
    </div>
由于没有SelectElement标记,因此无法使用

<select>

我试过选择XPATH元素的<li>,但没有运气:

var jobTypeInput = Driver.Instance.FindElement(By.XPath("/html/body/form/div[4]/div[2]/section/div[2]/div[1]/div[3]/fieldset[1]/div[4]/div/div/ul/li[1]"));
jobTypeInput.Click();

出现此错误:

  

无法找到元素:   { “方法”: “的xpath”, “选择器”:“/ HTML /体/形式/ DIV [4] / DIV [2] /部分/ DIV [2] / DIV [1] / DIV [3] /字段集[ 1] / DIV [4] / DIV / DIV / UL /利[1]“}

有关如何使用其中一个值填充下拉列表的任何想法吗?

3 个答案:

答案 0 :(得分:1)

我无法直接回答为什么FindElement没有获得该元素,但我有一些建议。

这里绝对需要Xpath吗?如何使用CSS选择器或通过LinkText搜索?

我会尝试做:

Driver.Instance.FindElements(By.CssSelector(".active-result"))[1] ; 

您是否使用过Chrome扩展程序&#34;选择器小工具&#34;?对于像这样的事情来说,它非常棒。

答案 1 :(得分:0)

在:

var selected = Driver.Instance.FindElement(By.XPath("/html/body/form/div[4]/div[2]/section/div[2]/div[1]/div[3]/fieldset[1]/div[4]/div/div/ul/li[2]"));
selected.Click();
var selected = Driver.Instance.FindElement(By.XPath("/html/body/form/div[4]/div[2]/section/div[2]/div[1]/div[3]/fieldset[1]/div[4]/div/div/ul/li[2]"));
selected.Click();
中使用: FindElement 后,您将始终获得:
Cannot apply indexing with [] to an expression of type 'OpenQA.Selenium.IWebElement
尝试使用:
var jobTypeInput = Driver.Instance.FindElements(By.Id("phmain_0_phcontent_4_ddlJobType_chosen"));
jobTypeInput.Click();

Thread.Sleep(3000);

var selected = Driver.Instance.FindElements(By.XPath("/html/body/form/div[4]/div[2]/section/div[2]/div[1]/div[3]/fieldset[1]/div[4]/div/div/ul/li[2]")); selected.Click();

答案 2 :(得分:-1)

我已设法解决此问题,使用以下代码:

var jobTypeInput = Driver.Instance.FindElement(By.Id("phmain_0_phcontent_4_ddlJobType_chosen"));
jobTypeInput.Click();

Thread.Sleep(3000);

var selected = Driver.Instance.FindElement(By.XPath("/html/body/form/div[4]/div[2]/section/div[2]/div[1]/div[3]/fieldset[1]/div[4]/div/div/ul/li[2]"));
selected.Click();

基本上我已经按ID选择了下拉列表并打开了它。之后,我找到了我想要选择的项目并通过xPath选择它。

也许不是最好的解决方案,但它对我有用。