javascript - argument[0].click() 不适用于 selenium 中的选择选项

标签 javascript c#-4.0 selenium selenium-webdriver ui-automation

我正在使用 selenium 来实现 Web 应用程序自动化。
我卡在一点上,我正在使用.ExecuteScript()执行一些操作,例如单击链接,为此我使用:-

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", driver.FindElement(By.XPath("//a[contains(text(),'Login to the Demo')]")));


[注意:对于正在使用的每个可点击元素,此方法是因为可点击元素可能隐藏或在网页中不可见] 但这种方法不适用于
<select> <option>item<option> .. </select>

我正在使用下面的代码,单击一个选择选项:

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click()", driver.FindElement(By.XPath("//select[@id='form_switcher']/option[5]")));

但没有发生任何事情,也没有给出任何错误/异常。

--编辑开始--
但是如果我不使用 ExecuteScript()那么它的工作正常:

driver.FindElement(By.XPath("//select[@id='form_switcher']/option[5]")).Click();

--编辑结尾--

[注意:我使用单击来选择选项,以便触发更改事件。]

谁能解释一下如何使用 ((IJavaScriptExecutor)driver).ExecuteScript 单击选择选项

提前致谢。

最佳答案

对于下拉菜单,您需要选择而不是单击。您应该返回该元素,然后执行 element.SelectedIndex = 5;

如果您需要修改 javascript 以通过 javascript 而不是 selenium 获取元素,您可以使用位于 https://developer.mozilla.org/en-US/docs/Web/API/document.evaluate?redirectlocale=en-US&redirectslug=DOM%2Fdocument.evaluatedocument.evaluate

然后您返回一个代表您的选择元素的元素,然后设置 SelectedIndex 值。

我相信这是正确的......

((IJavaScriptExecutor)driver).ExecuteScript("var element = document.evaluate(\"//select[@id='form_switcher']\", document.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); element.SelectedIndex = 5;  return element.fireEvent('event specifics go here')");

http://www.java2s.com/Code/JavaScript/HTML/UsingthefireEventMethod.htm

关于javascript - argument[0].click() 不适用于 selenium 中的选择选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290100/

相关文章:

javascript - session 值 ASP.NET 中的简单逗号

迭代两个数组进行命中检测时出现 Javascript 错误

javascript - 如果条件文本在 AngularJs 中包含空格,ng-if 不起作用

c# - 通过linq获取一个属性的集合

Python/Selenium - 无法点击 www.instagram.com 上的“接受 cookie”按钮

javascript - String.split() JavaScript 方法在 Firefox 中不起作用

c# - 是否为每个新实例实例化基类?

c# - 更新实体,所有更改不保存

Python selenium iselementpresent 给出 "wrong"答案

javascript - 使用 Javascript 伪造浏览器位置