[英]Selenium (C#) IEWebDriver Use ExecuteJavaScript calling jQuery to return an IWebElement
I'm new to this but I want to attempt something like this: 我是新手,但我想尝试这样的事情:
var clickableThing = myWebDriver.ExecuteJavaScript<IWebElement>("return $('" + Selector + "');");
clickableThing.Click();
My aim is to bypass the IE driver's css selector and use an alternative css selection implementation. 我的目标是绕过IE驱动程序的css选择器,并使用替代的css选择实现。
Any help would be very much appreciated. 任何帮助将不胜感激。
I think you need to return a DOM element, not a jQuery object. 我认为您需要返回DOM元素,而不是jQuery对象。
If so, then adding [0]
should do the trick: 如果是这样,那么添加[0]
应该可以解决问题:
var clickableThing = myWebDriver.ExecuteJavaScript<IWebElement>("return $('" + Selector + "')[0];");
clickableThing.Click();
Follow-Up Verification 后续验证
Disclaimer: This may not apply to you, since I'm apparently using a different version of the WebDriver (mine has the ExecuteScript
method, not ExecuteJavaScript
). 免责声明:这可能不适用于您,因为我显然使用了其他版本的WebDriver(我使用的是ExecuteScript
方法,而不是ExecuteJavaScript
方法)。 But just as a sanity check... 但是就像一个健全的检查...
I have a little C# helper library for Selenium, which had the following Click method: 我有一个用于Selenium的C#帮助程序库,该库具有以下Click方法:
public void Click(string cssSelector)
{
Log("Clicking element \"{0}\".", cssSelector.Replace("\"", "\\\""));
_driver.FindElementByCssSelector(cssSelector).Click();
}
When I updated it to use the JavaScript approach from your original post, it threw an exception because it couldn't cast the return object to an IWebElement
. 当我更新它以使用原始文章中的JavaScript方法时,它引发了一个异常,因为它无法将返回对象IWebElement
转换为IWebElement
。
public void Click(string cssSelector)
{
Log("Clicking element \"{0}\".", cssSelector.Replace("\"", "\\\""));
IWebElement webElement = (IWebElement)_driver.ExecuteScript("return $('" + cssSelector + "');");
webElement.Click();
}
But when I added the [0]
, it worked. 但是当我添加[0]
,它起作用了。
public void Click(string cssSelector)
{
Log("Clicking element \"{0}\".", cssSelector.Replace("\"", "\\\""));
IWebElement webElement = (IWebElement)_driver.ExecuteScript("return $('" + cssSelector + "')[0];");
webElement.Click();
}
So, while this isn't targeting the exact same IJavaScriptExecutor
interface implementation, I think it at least indicates that the [0]
tweak will probably fix things. 因此,尽管这并不是针对完全相同的IJavaScriptExecutor
接口实现,但我认为它至少表明[0]
调整可能会解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.