在Selenium WebDriver中执行'.hover'Javascript

时间:2012-04-20 01:21:01

标签: javascript selenium selenium-webdriver

我正在使用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文件中,所以我的理解中出了点问题。

1 个答案:

答案 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元素对象获得。