我在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>
有人可以帮助解决这个问题。谢谢你的帮助。
答案 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();