在不重置浏览器的情况下失去元素的焦点';s垂直滚动条

本文关键字:滚动条 垂直 焦点 失去 浏览器 情况下 元素 | 更新日期: 2023-09-27 18:25:05

我创建了一个自定义命令,它失去了当前web元素的焦点,如下所示:

public void LoseFocus()
{
    int? scrollPositionY = Driver.Current.GetIntValueUsingScript("return $(document).scrollTop();");
    this.ClickOnElementsCoordinates(Driver.Current.FindElement(By.TagName("body")), 0, scrollPositionY.Value);
}
public void ClickOnElementsCoordinates(IWebElement element, int positionX, int positionY)
{
    var builder = new OpenQA.Selenium.Interactions.Actions(Driver.Current);
    builder.MoveToElement(element, positionX, positionY)
        .Click().Build().Perform();
    builder.Release();
}

问题是,每次我调用LoseFocus()时,它都会将垂直滚动位置设置为0
垂直滚动条不应更改当前位置。我该如何做到这一点?我还尝试过只使用这样的javascript

ExecuteScript(null, "document.elementFromPoin(0,""+scrollPositionY.Value+"").click();");

但同样的情况也会发生。

编辑1

在上面的c#代码中,我得到了当前的垂直滚动条位置。然后我点击坐标(0,滚动位置Y)上的"身体"元素。我这样做是为了防止滚动条更改其当前的Y坐标,但仍然不起作用。

编辑2

这里还有一个示例html示例html

在不重置浏览器的情况下失去元素的焦点';s垂直滚动条

我实现的所有逻辑都是正确的,除了我需要点击offsetY而不是absoluteY坐标,所以不需要传递任何元素(在我的例子中是文档)。

// Wrong
builder.MoveToElement(element, posX, posY)
// Correct, clicking on document's offset
builder.MoveByOffset(posX, posY)