我正在使用 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.evaluate 的 document.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/