【问题标题】:Selenium - how to switch focus to overlaySelenium - 如何将焦点切换到覆盖
【发布时间】:2016-09-06 13:03:52
【问题描述】:

我有一个覆盖在主窗口顶部打开的术语。这是滚动条的样子:

新窗口未被识别为新的“窗口”或选项卡,因此我无法正常切换到它,它也不是 iframe 所以 driver.switchTo().frame(iframe);也不会工作。这是我迄今为止尝试过的:

1) 点击元素(元素是指包含内容的覆盖片段。什么都不做。

2) 使用以下方法切换焦点:

jse.executeScript("var ov = document.getElementsByClassName('overlay__content'); window.setTimeout(function () { ov[0].focus(); }, 0); ");

3) 尝试点击然后使用切换到活动元素:

_driver.getWebDriver().switchTo().activeElement();

这些结果都不起作用。我正在尝试切换到一个窗口,然后在其上使用 ashot 来获得全屏截图。这对 iframe 非常有效,但我对如何在此处进行感到困惑。任何 scrollBy(0,10) 等都会导致主窗口滚动。

【问题讨论】:

  • 很难理解你的问题..会详细说明吗???
  • 以什么方式?覆盖打开了我想要设置焦点然后滚动的主窗口,但我不能。
  • 你能分享屏幕截图的全视图而不是侧视图吗??
  • 如果它只是一个普通的html标签,你为什么需要滚动它呢?如果您像选择任何其他元素一样选择它,那么您将获得有关它的所有信息。
  • 是新的浏览器窗口吗?或者只是页面内的一个 div

标签: javascript java selenium


【解决方案1】:

为了在覆盖 div 内滚动,您可以使用 JavaScriptExecuter 像这样创建一个方法;

public void scrollDownInsideOf(WebElement element, int pxForScrollDown) {
    JavascriptExecutor js = (JavascriptExecutor) webDriver;
    js.executeScript("arguments[0].scrollTop = arguments[1];", element, pxForScrollDown);
}

元素应该是带有叠加层的内部div

【讨论】:

  • 问题不在于在元素内滚动太多,而是通过将“焦点”设置为元素来启用 ashot (github.com/yandex-qatools/ashot) 来做到这一点,就像对 iframe 所做的那样。但我会试一试,看看结果如何,谢谢。
  • 如果它只是一个 div 就像你说的那样,你不能像使用 windows 到 iframe 那样使用 switchTo()。因为没有什么可以切换的,是页面源的内容。
猜你喜欢
  • 2018-08-17
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 2022-07-09
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
相关资源
最近更新 更多