使用此代码将元素引入浏览器视图时,它大部分时间都可以工作。
protected void MakeVisible(IWebElement link, bool always)
{
var actions = new Actions(this.Driver);
actions.MoveToElement(link).Perform();
...
但是,当元素只是(比如那里有50%的按钮)时,屏幕上没有,但它不足以登记点击事件。< / p>
(剪辑的底部是浏览器视口的底部)
我该如何处理这个边缘情况?
使用FireFox驱动程序遇到了这种情况。
答案 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();
}