2012-04-20 77 views
1

我使用Selenium WebDriver并希望从网页执行一些JavaScript。我发现了一些执行javascript的非常有用的帖子,并且取得了一些成功,尽管当我必须从页面上的对象调用javascript时,我似乎很挣扎(我是新手,因此我的术语和基本理解可能是关?)。以下是在页面上的JavaScript我想打电话:执行'.hover'Javascript在Selenium WebDriver

$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文件中,所以我的理解有点问题。

回答

3

一个间接的答案,但为什么不只是使用ActionBuilder执行悬停在一个元素上?

Actions builder = new Actions(driver);

builder.moveToElement(someElement);

builder.build().perform();

更直接的答案...找到必须是来自JavaScript库的功能,而不是通过浏览器默认提供的功能。如果你要这样做:

return ((IJavaScriptExecutor)webDriverInstance).ExecuteScript("return arguments[0].innerHTML", elementInstance).ToString(); 这将工作,因为innerHTML属性可从任何javascript元素对象中获得。

+0

首先,感谢您的间接回答,但是我一直这样做。更多的情况是,这些行为似乎并没有引发正确的jscript回应(但是你是对的,我应该努力通过行动来做到这一点)。 对于第二个答案,这是有帮助的,但是它现在提出了另一个问题,我怎么能找到一个隐藏的img(或div持有隐藏的img)并将其可见性设置为隐形。也许我应该添加更多的代码? – Nashibukasan 2012-04-20 06:01:47

+1

这只会是直线上升的JavaScript。你有元素对象,它只是“arguments [0]”,那么它就是使用javascript来修改html标签的属性。有几种方法可以隐藏元素,因此您需要知道您需要做什么才能隐藏元素。最简单的情况下,javascript看起来像这样:“arguments [0] .setAttribute(”style“,”display:block“)”或“arguments [0] .setAttribute(”style“,”visibility:visible“)”。一个不同的例子可能是,如果你需要改为将元素的类修改为可显示元素的类。 – 2012-04-20 20:44:23

+0

谢谢,现在对我来说更有意义。然而,我现在又遇到了另一个问题。我想展示的元素隐藏起来直到盘旋!我有一个解决方案,使用动作(我将光标移动到强制悬停呼叫的容器),所以我会使用它,但希望我可以用js来做到这一点!干杯。 – Nashibukasan 2012-04-22 23:05:15

相关问题