arguments [0] .click()不适用于selenium中的select选项

时间:2014-08-13 15:23:00

标签: 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点击选择选项

提前谢谢。

1 个答案:

答案 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.evaluatedocument.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