我在使用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]“}
有关如何使用其中一个值填充下拉列表的任何想法吗?
答案 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选择它。
也许不是最好的解决方案,但它对我有用。