【问题标题】:How to scroll down a sub-section in Selenium (C#)?如何在 Selenium (C#) 中向下滚动一个子部分?
【发布时间】:2017-02-03 14:57:27
【问题描述】:

我正在使用 C# 中的 Selenium Webdriver 对带有网格的网页进行 UI 测试。

网格有自己的滚动条,我想向下滚动到网格底部以检查当我通过模态表单添加它时是否出现了某个结果(UI 测试当前失败,因为它不能在我向下滚动之前查看结果)。

如何定位网格上的滚动条,而不是主网页上的普通滚动条?这是我的网格滚动条的 HTML:

<div class="ScrollbarLayout_face ScrollbarLayout_faceVertical public_Scrollbar_face" style="height: 367.38px; transform: translate3d(0px, 148.535px, 0px); backface-visibility: hidden;"></div>

我正在考虑使用下面的代码,但我想不出如何定位网格底部的元素以滚动到?

WebElement element = driver.findElement(By.id("my-id"));
Actions actions = new Actions(driver);
actions.moveToElement(element);
actions.perform();

【问题讨论】:

  • 您应该尝试使用 javascript 函数 Element.scrollIntoView() 以达到 ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView()", driver.FindElement(By.id("my-id"))); 的特定元素
  • 这是我的问题 - 如果我可以首先定位或找到元素,我就不需要向下滚动。我的 UI 测试失败,因为无法查看该元素,即使它位于网格底部,只是看不见。
  • 如果你想在需要的时候滚动,你可以检查element.Displayed属性来决定是否滚动。

标签: c# html css selenium


【解决方案1】:

首先使用任何事件将焦点设置到网格的任何对象

driver.FindElement(By.XPath("/html/body/div[2]//table/tbody/tr[1]/td[1]")).Click();

然后在下面添加两行:

Actions actions = new Actions(driver);
actions.SendKeys(OpenQA.Selenium.Keys.End).Build().Perform();

【讨论】:

  • 非常感谢这个答案基本上为我做了。我需要做的是定位滚动条并单击它一次以激活它。然后我通过操作发送了“Page Down”命令(End 由于某种原因没有工作)并且这有效。干杯!
【解决方案2】:

尝试在该元素上执行操作而不向下滚动到那里。 也就是说,通过 findElement() 获取元素并在不滚动页面的情况下对其执行操作。

【讨论】:

  • 这就是我最初尝试做的。我的网格有一个属性 rows,它存储所有行及其信息。因此,当我添加新行时,我的检索代码(伪)如下所示: MyGrid.Rows.First(row => row.Text == "Random string") 当我使用断点进行调试时,我查看 MyGrid.Rows 对象所有的行都在那里。仔细观察,网格中不可见的行(即需要滚动才能可见的行)出现在 MyGrid.Rows 对象中,但其所有值都是空白字符串。
  • 另外,如果我能在第一时间找到该元素,那意味着我的 UI 测试将通过!我的 UI 测试检查网格中的行是否匹配元素,例如。 MyGrid.Rows.First.Should().Be("随机字符串");
  • 试试这个 Mouse.MoveScrollWheel(UITestControl, Int32),其中“UITestControl”将是您的网格控件
  • 如果 ...Wheel() 不起作用然后 ScrollToView(element) 试试这个
【解决方案3】:

感谢用户 nikhilp 的帮助,我设法解决了这个问题:

a) 定位滚动条的 XPath

Driver.FindElement(By.XPath("//*[@id=\"myGrid\"]/div/div/div[2]/div"))

b) 单击滚动条一次以激活它

.Click()   

c) 发送 Page Down 命令

Actions actions = new Actions(Driver);
actions.SendKeys(Keys.PageDown).Build().Perform();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多