如何在 C# 中使用 Selenium 驱动程序向上/向下滚动页面?

Posted

技术标签:

【中文标题】如何在 C# 中使用 Selenium 驱动程序向上/向下滚动页面?【英文标题】:How to scroll page up/down using Selenium Driver in C#? 【发布时间】:2021-12-01 02:00:03 【问题描述】:

我正在尝试在自动化测试环境中向上滚动窗口,但这不起作用(控制台中也没有错误):

public void ScrollToTheTop()

    if (this.driver is RemoteWebDriver remoteDriver)
    
        IjavascriptExecutor jex = remoteDriver;
        jex.ExecuteScript("window.scrollTo(0,0)");
    

现在,如果我尝试执行 jex.ExecuteScript("alert('Something')") 它可以正常工作,这意味着 js 可以正确执行。但由于某种原因,滚动操作不起作用(也尝试过scrollBy())。

有人知道如何执行滚动脚本吗?谢谢。

【问题讨论】:

不回答我的问题,但这是我发现单击不可见元素的一种解决方法:((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].click();", element); 元素的类型为IWebElement 【参考方案1】:

如果你想在 C# 中滚动,使用 ExecuteScript 请使用下面的代码:

((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, Y)");

Y 应该是垂直轴。

向下滚动:

((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, 200)");

或向上滚动:

((IJavaScriptExecutor)Driver).ExecuteScript("window.scrollTo(0, -200)");

C#-Selenium 绑定中移动到特定的 Web 元素:

IWebElement e = Driver.FindElement(By.XPath(xpath of the web element));
((IJavaScriptExecutor)Driver).ExecuteScript("arguments[0].scrollIntoView(true);", e);

移动到页面末尾:

((IJavaScriptExecutor)Driver).ExecuteScript("var scrollingElement = (document.scrollingElement || document.body);scrollingElement.scrollTop = scrollingElement.scrollHeight;");

【讨论】:

感谢代码示例,但如果您仔细观察,您会发现我的代码几乎相同,但它不起作用。问题是窗口滚动脚本对页面没有任何影响。 你有一个叫做RemoteWebDriver的东西我相信它是webdriver的父类。您是否尝试了所有这些但没有任何效果? 它是所有不同驱动程序(Chrome、Firefox 等)的父类。正如我所说,它完成了这项工作,我已经使用alert( ) 脚本对其进行了测试,并且它执行正确。出于某种原因,滚动脚本没有任何效果。

以上是关于如何在 C# 中使用 Selenium 驱动程序向上/向下滚动页面?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Selenium WebDriver C# 获取 HTTP 状态码

Selenium WebDriver - 如何使用 C# 设置页面加载超时

在 selenium 和 c# 中等待完成的下载文件

如何使用 C# selenium 自动化 Md2-datepicker?

如何在 c# 中使用 Selenium 刷新网页?

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?