Selenium WebDriver MoveToElement - 隐藏元素,悬停和toggleClass

时间:2013-11-12 08:57:58

标签: c# jquery selenium selenium-webdriver

Selenium WebDriver:2.35。 FireFox:25.0

我想将鼠标移到div上,这会导致隐藏的图像变得可见,然后单击图像。我已阅读帖子hereherehere和其他人。一般的答案是做一些形式的事情:

action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here")).click().build().perform();

但是,这在以下示例中不起作用:

HTML:

<div id="bb_testDiv">
    <img class="bb_matchImgTest bb_standardHidden" src='@Url.Content( "~/images/match.png" )' alt='Match'/>
</div>

使用Javascript / jquery的:

 $( document ).on( 'hover', '#bb_testDiv', function ()
 {           
     $( this ).find( '.bb_matchImgTest' ).toggleClass( 'bb_standardHidden' );
 } )        
 $( document ).on( 'click', '.bb_matchImgTest', function ()
 {
     alert('here');
 } )

CSS:

.bb_standardHidden
{
    visibility:hidden;
}

C#测试代码:

IWebElement testDiv = WebDriver.FindElement( By.Id( "bb_testDiv" ) );            
Actions builder = new Actions( WebDriver );
Actions hoverClick = builder.MoveToElement( testDiv ).MoveToElement( testDiv.FindElement( By.ClassName( "bb_matchImgTest" ) ) ).Click();
hoverClick.Build().Perform();

问题是未触发click事件。此外,元素保持可见,因此任何后续鼠标悬停都会隐藏它。当然,这一切都可以通过手动测试完成。

问题似乎与悬停事件有关。如果我把它分成两个事件 - mouseenter和mouseleave(而不是悬停)与addClass和removeClass(而不是toggleClass)然后它的工作原理。只是想知道是否可以通过悬停来实现这一点?

1 个答案:

答案 0 :(得分:5)

由于隐藏了元素.bb_standardHidden,因此可能是因为MoveToElement无法正常工作。

IWebElement testDiv = WebDriver.FindElement( By.Id( "bb_testDiv" ) );            
Actions builder = new Actions( WebDriver );
Actions hoverClick = builder.MoveToElement( testDiv ).MoveByOffset( x, y ).Click();
hoverClick.Build().Perform();

用x和y确保鼠标悬停在隐藏的图片上。