我正在使用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
点击选择选项
提前谢谢。
答案 0 :(得分:2)
对于下拉列表,您需要选择而不是单击。您应该返回该元素,然后执行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
然后返回一个表示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