从下拉菜单C#webdriver中选择隐藏值
本文关键字:隐藏 选择 下拉菜单 C#webdriver | 更新日期: 2023-09-27 17:59:02
我在C#网络驱动程序中选择下拉值时遇到问题。我收到一条错误消息,说它是一个不可见的元素。我研究了访问Web驱动程序C#中的隐藏元素,但未能找到可行的解决方案。到目前为止,我已经尝试了Actions方法和Java脚本Executor,但不确定我做错了什么。我对自动化和使用C#语言还很陌生。
这是我下面使用操作方法的代码
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脚本的新手,我不确定语法是否不正确。这是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>
有人能帮忙解决这个问题吗。谢谢你的帮助。
我不确定它是否有帮助,但还是让我试试:
首先,selenium网络驱动程序基本上是用于自动化您可以手动完成的事情。手动操作不能点击隐藏的元素,所以使用硒也不能。也许,如果您可以手动选择该值,那么有一些步骤您确实喜欢单击以打开下拉菜单,或者正如Parker Beck建议的那样,将鼠标悬停在某个元素上以打开下拉列表。然后,一旦图元可见并处于活动状态,就可以单击它。有了硒,你必须自动化所有相同的步骤。
也许,答案更简单:可能是在移动到元素action.MoveToElement(actionsMenu).Build().Perform();
之后,您必须等待一段时间才能单击,或者webdriver会太快!有很多方法可以等待,只要搜索一下,你就会发现很多关于它的话题!
阅读以下评论后进行编辑:行动MoveToElement(actionsMenu).Build().Perform();=>只移动鼠标指针。它不会单击它,因此您的下一个元素将不可见。如果您需要手动单击2次,您的selenium代码也应该单击两次。据我所知,你可能会错过第一次点击。
我觉得你把事情搞得太复杂了。不需要使用操作手动移动元素。你能试试下面的吗?
//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();