我有一个简单的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“方法(例如:1、2、3.)。你可以用反方向来做这件事。另一个想法是在jQuery中访问每个元素之前,在selenium中给它一个唯一的ID,但是它看起来不像那就行了,因为要设置它,您需要使用Javascript或jQuery。
我还没有找到一种方法来对每个元素进行通用,这是如何做到的呢?
发布于 2017-10-27 01:18:45
您可以并且一直能够通过JavaScript通过ExecuteScript
来回传递元素引用。这些原始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中一样。
https://stackoverflow.com/questions/46962307
复制相似问题