Skip to main content
 首页 » 编程设计

c#之Selenium WebDriver MoveToElement之隐藏元素、悬停和切换类

2024年02月01日28虾米哥

Selenium WebDriver:2.35。 火狐:25.0

我想将鼠标移到一个 div 上,这将使隐藏的图像变得可见,然后单击该图像。我已阅读帖子here , here , here和别的。一般的答案是做一些形式的事情:

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(); 

问题是没有触发点击事件。此外,该元素保持可见状态,因此任何后续的鼠标悬停都会隐藏它。当然,这一切都适用于手动测试。

问题似乎出在悬停事件上。如果我将其分为两个事件 - mouseenter 和 mouseleave(而不是悬停)以及 addClass 和 removeClass(而不是 toggleClass),那么它就可以工作。只是想知道是否可以通过悬停使其工作?

请您参考如下方法:

由于元素 .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 来确保鼠标将在隐藏的图片上。