2017-04-10 117 views
0

使用此代码将元素带入浏览器视图时,它大部分时间都有效。MoveToElement元素刚刚在屏幕上时

protected void MakeVisible(IWebElement link, bool always) 
    { 
     var actions = new Actions(this.Driver); 
     actions.MoveToElement(link).Perform(); 
     ... 

然而,当元素是只是(比如一个按钮,50%存在)在屏幕上,它没有,但它是不够的屏幕为click事件注册。

enter image description here

(在剪断的底部是浏览器窗口的底部)

我该如何处理这种特殊情况?

这是使用FireFox驱动程序遇到的。

回答

1

我从来没有见过这种行为。通常,当我点击一个元素时,如果它不在屏幕外,那么视口(自动)会滚动,以便它可见并且被点击。我会给你我最好的猜测,希望它会给你一些想法,你可以调查并希望解决问题。

所以我认为问题是.MoveToElement()移动到元素的中心。如果所讨论的元素的中心位于页面上,但由于它不完全可见而无法点击,那么似乎解决方案就是确保整个元素都在页面上。我能想到的一个方法是使用MoveToElement(IWebElement, Int32, Int32)。偏移量来自元素的左上角。如果您使用此选项移动到左上角然后右下角,则该组合应完全显示该元素,然后单击它。左上角为0,0,右下角为IWebElement.Size,以获取元素的宽度和高度。

函数会是这个样子

public void ShowElement(IWebElement e) 
{ 
    Actions action = new Actions(Driver); 
    action.MoveToElement(e, 0, 0).MoveToElement(e, e.Size.Width, e.Size.Height).Build().Perform(); 
}