Selenium(C#)IEWebDriver使用ExecuteJavaScript调用jQuery来返回IWebElement

时间:2014-10-14 15:14:45

标签: c# selenium selenium-webdriver

我是新手,但我想尝试这样的事情:

var clickableThing = myWebDriver.ExecuteJavaScript<IWebElement>("return $('" + Selector + "');");
clickableThing.Click();

我的目标是绕过IE驱动程序的css选择器并使用另一种css选择实现。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为你需要返回一个DOM元素,而不是一个jQuery对象。

如果是这样,那么添加[0]应该可以解决问题:

var clickableThing = myWebDriver.ExecuteJavaScript<IWebElement>("return $('" + Selector + "')[0];");
clickableThing.Click();

跟进验证

免责声明:这可能不适用于您,因为我显然使用的是不同版本的WebDriver(我的方法是ExecuteScript,而不是ExecuteJavaScript)。但就像理智检查一样......

我有一个用于Selenium的小C#帮助程序库,它有以下Click方法:

public void Click(string cssSelector)
{
    Log("Clicking element \"{0}\".", cssSelector.Replace("\"", "\\\""));
    _driver.FindElementByCssSelector(cssSelector).Click();
}

当我更新它以使用原始帖子中的JavaScript方法时,它会抛出异常,因为它无法将返回对象强制转换为IWebElement

public void Click(string cssSelector)
{
    Log("Clicking element \"{0}\".", cssSelector.Replace("\"", "\\\""));
    IWebElement webElement = (IWebElement)_driver.ExecuteScript("return $('" + cssSelector + "');");
    webElement.Click();
}

但是当我添加[0]时,它就有效了。

public void Click(string cssSelector)
{
    Log("Clicking element \"{0}\".", cssSelector.Replace("\"", "\\\""));
    IWebElement webElement = (IWebElement)_driver.ExecuteScript("return $('" + cssSelector + "')[0];");
    webElement.Click();
}

所以,虽然这不是针对完全相同的IJavaScriptExecutor接口实现,但我认为它至少表明[0]调整可能会解决问题。