简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM