【问题标题】:How to click on element which is not visible on UI when zoom level is 100%?当缩放级别为 100% 时,如何单击 UI 上不可见的元素?
【发布时间】:2017-10-24 09:39:31
【问题描述】:

如果我的浏览器的缩放级别为 100%,则其中一个按钮不会出现在 UI 上,因此一旦我使用以下代码放大,该特定按钮就会出现在 UI 上

driver.execute_script("document.body.style.zoom='80%'")

但即使按钮以放大状态出现在 UI 上,该特定按钮上的操作也不会发生,而是我收到此错误消息

{WebDriverException}消息:未知错误:元素 在点 (891, 568) 处不可点击。其他 元素将收到点击:(会话信息: chrome=58.0.3029.110)(驱动程序信息:chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),平台=Windows NT 6.1.7601 SP1 x86)

我在本地机器上没有遇到问题,因为当浏览器的缩放级别为 100% 时,该特定按钮会出现在 UI 上,它运行良好,因为我不必放大。

但是由于我必须在使用客户端计算机远程连接的虚拟机上工作,所以我遇到了这个 UI 问题。由于虚拟框屏幕出现在我的客户端计算机屏幕内,因此它的高度减小了,并且该特定按钮从底部的 UI 中消失了。

因此需要放大以执行此操作并再次将缩放级别重置为 100%。我在这里做错了什么还是有其他方法可以解决此类问题?

编辑:附上截图

【问题讨论】:

  • 你可以尝试滚动元素而不是缩小吗JavascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("window.scrollBy(0,250)", ""); 如果遇到同样的问题,请告诉我
  • 更改客户端机器的分辨率
  • @ShoaibAkhtar 为什么你同时使用JavaPython 标签?你的客户是用什么语言写的?您还可以考虑发布有问题的代码的 sn-p 吗?就目前的情况而言,很难调试您的问题。同样,a.f.a.i.k,Webdriver 在执行 .click() 之类的操作时不受 display port 的约束,因此可能存在另一个问题,为什么这不起作用。
  • @TrimantraSoftwareSolution 我现在附上了有问题的屏幕截图,即使使用滚动条按钮也不会出现
  • @san1deep2set3hi 我设置了最大分辨率,即虚拟框为 1400*796,我的客户端机器为 1400*900,减少它会显示太多大字体。此外,由于虚拟框屏幕出现在客户端机器内,因此其高度降低并导致此问题

标签: java python selenium selenium-webdriver virtualbox


【解决方案1】:

您可以使用ActionChains 类模拟滚动

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_...
ActionChains(driver).move_to_element(element).perform()
element.click()

【讨论】:

    【解决方案2】:

    对于测试自动化,如果我们必须处理远程机器(例如,在 Sauce 实验室的情况下),认真对待屏幕分辨率总是有益的。

    在当今的响应式网站世界中,我们需要经常更改浏览器窗口大小,这一要求变得越来越有效。

    在酱汁实验室中,我们使用以下程序以编程方式更改客户端机器的分辨率

    capabilities.setCapability("screenResolution", "1920x1080");
    

    对于不同的设置,我们可能需要按照上面@ShoaibAkhtar 在 cmets 中提到的步骤进行操作。

    【讨论】:

      【解决方案3】:

      我有同样的问题。驱动程序通常应该在每次点击时滚动到元素,确实如此,但它滚动的只是让元素几乎不可见。

      所以有时它可以被另一个元素覆盖,而驱动程序认为元素是可见的,然后出现异常。

      我在这里找到了一个很好的解决方法:selenium scroll element into (center of) view

      居中页面,因此元素位于页面中间:

      在 C# 中:

      var js = d as IJavaScriptExecutor;
      
      String scrollElementIntoMiddle = "var viewPortHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);"
                                                          + "var elementTop = arguments[0].getBoundingClientRect().top;"
                                                          + "window.scrollBy(0, elementTop-(viewPortHeight/2));";
      
      js.ExecuteScript(scrollElementIntoMiddle, element);
      
      element.Click();
      

      我一开始尝试缩小,但至少在 Chrome 中,Selenium 在缩小时根本无法工作,所以没用。

      【讨论】:

        猜你喜欢
        • 2011-02-23
        • 1970-01-01
        • 2020-10-12
        • 2019-07-23
        • 2011-08-31
        • 2013-08-04
        • 2013-06-02
        • 2021-06-21
        • 1970-01-01
        相关资源
        最近更新 更多