首页 > 解决方案 > 使用 selenium 网格时更改浏览器缩放级别

问题描述

目前使用 selenium(在 Java 中)进行自动化测试。在 selenium 网格上运行测试时,窗口大小变为比我的本地小得多的窗口(在执行网格运行时我无法控制窗口大小)。网格运行期间较小的窗口宽度会导致页面对象在 HTML 中移动,从而更改它们的引用(xpath、css 选择器等)。这会导致代码抛出一堆空指针。关于如何解决这个问题的任何想法?我需要一个适用于 Chrome/Firefox/IE 的解决方案

由于我无法更改窗口大小,因此我想出的最佳解决方案是在执行网格运行时缩小浏览器,将对象移回原位。我正在使用 selenium 4.0.0-alpha-1 并尝试了以下方法:

  1. 动作类:
new Actions(driver).sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT)).perform();
  1. 使用 Actions 类定位 html 标记:
new Actions(driver).sendKeys(driver.findElement(By.tagName("html")),
Keys.chord(Keys.CONTROL, Keys.SUBTRACT)).perform();
  1. 使用 webdriver 定位 html 标记:
driver.findElement(By.tagName("html"))
.sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
  1. 使用 javascript:
engine.javaScript.execute("document.body.style.zoom = '75%'");
engine.javaScript.execute("document.body.style.webkitTransform='scale(.75)'");
  1. 使用机器人类:
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_SUBTRACT);
robot.keyRelease(KeyEvent.VK_SUBTRACT);
robot.keyRelease(KeyEvent.VK_CONTROL);

--

方法 1-3 不适用于本地或电网。

方法 4 适用于所有浏览器(使用 webkitTransform,因为它在所有 3 中都受支持),但它缩小了 CSS 而不是浏览器本身,因此尽管缩小了对象仍保留在同一位置。

方法 5 在本地适用于所有浏览器,但是在网格上运行时,什么也没有发生,因为我相信机器人需要一个 GUI 来与之交互。

这个问题的大多数答案已经超过 2 年了,似乎不再起作用,如果有任何帮助,或者是否有其他解决方案来解决窗口大小问题,将不胜感激。试图绕过专门为网格创建单独的对象引用。

标签: javaseleniumselenium-grid

解决方案


推荐阅读