元素仅在屏幕上时的MoveToElement

时间:2017-04-10 15:46:10

标签: c# selenium-webdriver

使用此代码将元素引入浏览器视图时,它大部分时间都可以工作。

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

但是,当元素只是(比如那里有50%的按钮)时,屏幕上没有,但它不足以登记点击事件。< / p>

enter image description here

(剪辑的底部是浏览器视口的底部)

我该如何处理这个边缘情况?

使用FireFox驱动程序遇到了这种情况。

1 个答案:

答案 0 :(得分: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();
}