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-found 元素的代码应该是这样的:

// 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# - 如何使用 MVVM Light 检测 TextBox 中的按键

php - 更改具有相同文件名的<img> src attr时出现缓存问题

c# - 如果不存在则生成方法

javascript - 在谷歌地图 api 中移动一个圆圈

c# - 重复维护 - 代码和文档

javascript - 如果ID使用jquery以偶数结尾,则将类应用于具有特定id的每个div

javascript - 正则表达式仅在行除破折号之外没有其他字符时匹配

javascript - Bootstrap navbar dropbox 不显示下拉菜单

javascript - 如果我立即让出,为什么我的 fork 会阻塞?

javascript - 算术运算符作为变量javascript