一尘不染

arguments [0] .click()对selenium中的select选项不起作用

selenium

我正在使用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();

- 编辑结束 -

[ 注意 :我正在使用click来选择选项,以便它触发更改事件。]

因此,任何人都可以向我解释一下如何使用“ ((IJavaScriptExecutor)driver).ExecuteScript

谢谢”预先单击选择选项。


阅读 2156

收藏
2020-06-26

共1个答案

一尘不染

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

如果您需要修改JavaScript以通过JavaScript而不是硒来获取元素,则可以利用document.evaluate位于的https://developer.mozilla.org/en-
US/docs/Web/API/document.evaluate?redirectlocale=zh-CN&redirectslug =
DOM%2Fdocument.evaluate

因此,您将返回一个代表您的select元素的元素,然后设置该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

2020-06-26