javascript - Selenium - 将 "WebElement"转换为 Javascript 或 JQuery 对象的通用方法

标签 javascript c# jquery selenium selenium-webdriver

我有一个简单的 WebElement,我想对我的对象执行一系列(一个或多个)JS/JQuery 类型的操作。

大多数时候这很简单,我只需获取对象的 ID,将其传递到“ExecuteScript”函数中,viola 工作得很好:

RemoteWebDriver driver = ...;
var element = driver.FindElementByXPath("..."); //Or any other type of lookup
driver.ExecuteScript(@"$('#" + element.GetAttribute("id") + "')."DoSomeStuff...;");

20% 这根本不起作用,因为该项目没有 ID。当然,有很多方法可以在 Selenium 中查找项目,也有很多方法可以在 jQuery 或 Javascript 中查找项目,但它们并不总是映射,虽然可以在 jQuery 中构造一个可以查找 Selenium 对象的查询,但每种对象类型的方法不能相同。

四处搜索似乎大多数人都使用“id”方法(示例:123)。你可以这样做 opposite way .另一个想法是在 jQuery 中访问每个元素之前,在 selenium 中给每个元素一个唯一的 ID,但它看起来不像 that would work。因为要设置它,您需要使用 Javascript 或 jQuery。

我还没有找到一种方法来普遍每个元素,如何做到这一点?

最佳答案

您可以并且始终能够通过 ExecuteScript 在 JavaScript 中来回传递元素引用。这些原始 DOM 元素是否可以转换为 JQuery 使用是我没有资格发言的问题。尽管如此,在您的 JavaScript 代码中引用 WebDriver 发现的元素的代码应该是这样的:

// Assume element holds a reference to an already-found
// IWebElement, found using the standard WebDriver FindElement
// methods, and that driver is a properly-instantiated
// IWebDriver object.
// N.B., doing proper casting here, since it's idiomatic in
// the WebDriver library to code to the interface, not the concrete
// implementation.
IJavaScriptExecutor executor = driver as IJavaScriptExecutor;
executor.ExecuteScript("alert(arguments[0].tagName);", element);

上面的代码将抛出一个警报(并阻止您的 Selenium 代码),显示元素的 tagName JavaScript 属性。您可以使用此技术来使用元素,就像在页面中的 JavaScript 中一样。

关于javascript - Selenium - 将 "WebElement"转换为 Javascript 或 JQuery 对象的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46962307/

相关文章:

C# : "A first chance exception of type ' System. InvalidOperationException'”

c# - 为什么对于这种特定情况,结构比类快得多?

javascript - 如何只显示 div 的第一行文本并在点击时展开?

javascript - Angular ng-click 事件

javascript - 使用 mocha 和 chaiAsPromised 测试异步函数时出现断言错误

javascript - 将 HTML 放置在光标旁边

c# - 为什么我们不能有一个标记为 [Serializable] 并同时继承自 MarshalByRefObject 的类?

javascript - 图像在悬停时跳起来

Jquery Ajax - 返回 bool 值?

jquery - 使用 jQuery 通过 Select 显示/隐藏多个 DIV