我是新手,但我想尝试这样的事情:
var clickableThing = myWebDriver.ExecuteJavaScript<IWebElement>("return $('" + Selector + "');");
clickableThing.Click();
我的目标是绕过IE驱动程序的css选择器并使用另一种css选择实现。
非常感谢任何帮助。
答案 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]
调整可能会解决问题。