CssSelector的Webdriver FindElement单击“不工作”

时间:2016-03-04 16:55:14

标签: selenium webdriver

我在网页上有一个下拉列表,用于选择使用jQuery Chosen插件呈现的国家/地区。以下html的摘录,

<div>
<label for="phMainContent_EmployeeAdd1_ddlCountry" id="phMainContent_EmployeeAdd1_lblCountry" class="short required">Country*</label>:
    <div id="phMainContent_EmployeeAdd1_ddlCountry_chzn" class="chzn-container undefined chzn-container-single" style="width: 199.44444px;">
       <a href="#x" class="chzn-single"><span>Please select ...</span><div><b></b></div></a>
       <div class="chzn-drop" style="left: -9000px; width: 197.222px; top: 28px;">
          <div class="chzn-search"><input type="text" style="width: 162px;"></div>
          <ul class="chzn-results">
             <li id="phMainContent_EmployeeAdd1_ddlCountry_chzn_o_0" class="active-result result-selected">Please select ...</li>
             <li id="phMainContent_EmployeeAdd1_ddlCountry_chzn_o_1" class="active-result">United Kingdom</li>
             <li id="phMainContent_EmployeeAdd1_ddlCountry_chzn_o_2" class="active-result">Afghanistan</li>
.......

如果我使用Selenium IDE记录从列表中选择“英国”的操作,则会记录以下脚本。运行代码片段以查看包含其中命令的表。

&#13;
&#13;
<table border="1">
  <tr>
    <td>Command</td>
    <td>Target</td>
  </tr>
  <tr>
    <td>click</td>
    <td>css=a.chzn-single > span</td>
  </tr>
  <tr>
    <td>click</td>
    <td>id=phMainContent_EmployeeAdd1_ddlCountry_chzn_o_1</td>
  </tr>
</table>
&#13;
&#13;
&#13;

我可以在IDE中重复运行此脚本,并且每次都从下拉列表中选择英国。但是,如果我导出下面的C#/ Nunit / Webdriver代码

driver.FindElement(By.CssSelector("a.chzn-single > span")).Click();
driver.FindElement(By.Id("phMainContent_EmployeeAdd1_ddlCountry_chzn_o_1")).Click(); 

并执行它,它在第一个语句中失败,并且Selenium 元素不可见异常。

有关如何解决此问题的任何建议?

2 个答案:

答案 0 :(得分:0)

您可以尝试xPath并选择//span[contains(.,'Please Select')]

答案 1 :(得分:0)

使用显式等待确保在单击

之前显示下拉列表
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement dropdown = wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("a.chzn-single > span")));
dropdown.Click(); 
driver.FindElement(By.Id("phMainContent_EmployeeAdd1_ddlCountry_chzn_o_1")).Click();