从下拉列表中选择隐藏值C#webdriver

时间:2016-07-27 19:49:10

标签: c# selenium webdriver

我在C#webdriver中选择下拉值时遇到问题。我收到一条错误消息,说它是一个不可见的元素。我研究了访问Web驱动程序中的隐藏元素,C#但无法找到可行的解决方案。到目前为止,我已经尝试了Actions方法和Java脚本Executor,但不确定我做错了什么。我对自动化和使用C#语言都很陌生。

这是我使用Actions方法

的下面的代码
IWebElement actionsMenu = driver.FindElement(By.Id("InitiatorID"));
Actions action = new Actions (driver);
action.MoveToElement(actionsMenu).Build().Perform();      
driver.FindElement(By.CssSelector("[index ='2']")).Click();**/

脚本使用Java脚本执行程序

((IJavaScriptExecutor)wd).ExecuteScript("arguments[0].Click()");
wd.FindElement(By.XPath("//input[@value = Bridget]"));
String("arguments[0].trigger('click')");
wd.FindElement(By.XPath("//input[@value = Bridget]"));

我也是Java Script的新手,我不确定语法是否不正确。 这是HTML

<div class="question">
   <label for="InitiatorID">Initiator:</label>
   <div id="InitiatorID_chzn" class="chzn-container chzn-container-single" style="width: 270px;">
      <a href="javascript:void(0)" class="chzn-single" tabindex="-1">
         <span>Not Assigned</span>
      </a>
      <div class="chzn-drop" style="left: -9000px; width: 268px; top: 24px;">
         <div class="chzn-search">
            <input type="text" autocomplete="off" style="width: 233px;" tabindex="-1">
         </div>
         <ul class="chzn-results">
            <li id="InitiatorID_chzn_o_0" class="active-result result-selected" style="">Not Assigned</li>
      </div>

有人可以帮助解决这个问题。谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

我不确定它是否有帮助,但让我尝试一下:

首先,selenium webdriver基本上用于自动化你可以手动完成的东西。手动你不能点击一个隐藏的元素,所以使用selenium你也不能。也许,如果手动您可以选择该值,您可以执行一些步骤,例如单击以打开下拉菜单,或者Parker Beck建议将鼠标悬停在元素上以打开下拉菜单。然后,一旦元素可见并处于活动状态,您就可以单击它。 使用硒,您必须自动完成所有相同的步骤。

也许,答案有点简单:可能是在移动到元素action.MoveToElement(actionsMenu).Build().Perform();之后你必须等一下才能点击或webdriver太快了! 有很多方法可以等待,只需搜索一下,你就会发现一堆主题!

阅读下面的评论后进行修改: 。action.MoveToElement(actionsMenu).Build()执行(); ==&GT;只移动鼠标指针。它不会单击它,因此您的下一个元素将不可见。如果您需要手动单击2次,您的硒代码也应单击两次。据我所知,到目前为止,您可能会错过第一次点击。

答案 1 :(得分:0)

我认为你让事情变得太复杂了。不应该使用动作手动移动元素。你能试试以下吗?

//Find the dropdown container and click it
IWebElement actionMenu = driver.FindElement(By.Id("InitiatorID"));
actionMenu.Click(); //Feel free to condense this to just driver.FindElement().Click();

//Find the now visible option and click it
driver.FindElement(By.XPath("//input[@value = Bridget]")).Click();