我正在使用Selenium WebDriver并希望从网页执行一些javascript。我已经找到了一些关于执行javascript的一些(非常有用的)帖子并取得了一些成功,但是当我必须从页面上的对象调用javascript时我似乎很挣扎(我是新手,因此我的术语和基本理解可能是关?)。以下是我要调用的页面上的javascript:
$j(".webGrid tr").hover(function () {
$j(this).find("#imgEdit").css("visibility", "visible");
}
我目前觉得我最近的两次尝试是:
js.ExecuteScript("('.itemId').find('#imgEdit').css('visibility', 'visible')"); //1
js.ExecuteScript("(arguments[0]).find('#imgEdit').css('visibility', 'visible')", element); //2
谁能让我知道我哪里出错了?在第一种情况下,我得到一个“。itemId”.find不是函数,而在第二个参数[0]中.find不是函数。我发现'find'是潜在的问题,但是它存在于页面javascript文件中,所以我的理解中出了点问题。
答案 0 :(得分:3)
间接答案,但为什么不使用ActionBuilder在元素上执行悬停?
Actions builder = new Actions(driver);
builder.moveToElement(someElement);
builder.build().perform();
更直接的答案... find必须是来自javascript库的函数,而不是默认情况下通过浏览器可用的函数。如果你要做这样的事情:
return ((IJavaScriptExecutor)webDriverInstance).ExecuteScript("return arguments[0].innerHTML", elementInstance).ToString();
它可以工作,因为innerHTML属性可以从任何javascript元素对象获得。