在不重置浏览器垂直滚动条的情况下从元素中失去焦点
Lose focus from element without resetting the browser's vertical scroll bar
我创建了一个自定义命令,它失去了当前 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# 代码中,我得到了当前垂直滚动条的位置。然后我点击坐标上的 'body' 元素(0,滚动位置 Y)。我这样做是为了防止滚动条改变其当前的 Y 坐标,但仍然不起作用。
编辑 2
这里也有一个例子htmlsample html
我实现的所有逻辑都是正确的,除了我需要点击 offsetY
而不是 absoluteY
坐标,所以不需要传递任何元素(在我的例子中是文档)。
// Wrong
builder.MoveToElement(element, posX, posY)
// Correct, clicking on document's offset
builder.MoveByOffset(posX, posY)
我创建了一个自定义命令,它失去了当前 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# 代码中,我得到了当前垂直滚动条的位置。然后我点击坐标上的 'body' 元素(0,滚动位置 Y)。我这样做是为了防止滚动条改变其当前的 Y 坐标,但仍然不起作用。
编辑 2
这里也有一个例子htmlsample html
我实现的所有逻辑都是正确的,除了我需要点击 offsetY
而不是 absoluteY
坐标,所以不需要传递任何元素(在我的例子中是文档)。
// Wrong
builder.MoveToElement(element, posX, posY)
// Correct, clicking on document's offset
builder.MoveByOffset(posX, posY)