当缩放级别为100%时,如何点击在UI上不可见的元素?

时间:2017-05-24 07:25:38

标签: java python selenium selenium-webdriver virtualbox

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

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

但即使按钮在放大状态下出现在按钮上,也不会对该特定按钮执行操作,而是收到此错误消息

  

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

我的本​​地计算机上没有问题,因为当浏览器的缩放级别为100%时,UI上会显示该特定按钮,因为我无需放大,所以效果很好。

但是因为我必须使用客户端机器远程连接的虚拟盒,所以我遇到了这个UI问题。由于虚拟框屏幕出现在我的客户端计算机屏幕内,因此其高度会降低,并且特定按钮会从底部的UI消失。

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

编辑:附加截图 enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用ActionChains

模拟滚动
from selenium.webdriver.common.action_chains import ActionChains

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

答案 1 :(得分:0)

我有同样的问题。驱动程序通常应该滚动到每个Click上的元素,它确实如此,但它滚动只是因为元素几乎不可见。

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

我在这里找到了一个很好的解决方法: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在缩小时根本无法工作,因此无法正常工作。

答案 2 :(得分:0)

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

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

在酱料实验室中,我们使用以下

以编程方式更改客户端计算机的分辨率
capabilities.setCapability("screenResolution", "1920x1080");

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