首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Selenium -将"WebElement“转换为Javascript或JQuery对象的通用方法

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

Stack Overflow用户
提问于 2017-10-26 19:26:06
回答 1查看 1.5K关注 0票数 4

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

在大多数情况下,这很容易,我只需获取对象的ID,将其传递到"ExecuteScript“函数中,viola工作得很好:

代码语言:javascript
运行
复制
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.)。你可以用反方向来做这件事。另一个想法是在jQuery中访问每个元素之前,在selenium中给它一个唯一的ID,但是它看起来不像那就行了,因为要设置它,您需要使用Javascript或jQuery。

我还没有找到一种方法来对每个元素进行通用,这是如何做到的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 01:18:45

您可以并且一直能够通过JavaScript通过ExecuteScript来回传递元素引用。这些原始DOM元素是否可以转换为由JQuery使用,这是我没有资格发言的问题。然而,在JavaScript代码中引用WebDriver找到的元素的代码如下所示:

代码语言:javascript
运行
复制
// 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中一样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46962307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档