java - 使用 selenium 网格时更改浏览器缩放级别
问题描述
目前使用 selenium(在 Java 中)进行自动化测试。在 selenium 网格上运行测试时,窗口大小变为比我的本地小得多的窗口(在执行网格运行时我无法控制窗口大小)。网格运行期间较小的窗口宽度会导致页面对象在 HTML 中移动,从而更改它们的引用(xpath、css 选择器等)。这会导致代码抛出一堆空指针。关于如何解决这个问题的任何想法?我需要一个适用于 Chrome/Firefox/IE 的解决方案
由于我无法更改窗口大小,因此我想出的最佳解决方案是在执行网格运行时缩小浏览器,将对象移回原位。我正在使用 selenium 4.0.0-alpha-1 并尝试了以下方法:
- 动作类:
new Actions(driver).sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT)).perform();
- 使用 Actions 类定位 html 标记:
new Actions(driver).sendKeys(driver.findElement(By.tagName("html")),
Keys.chord(Keys.CONTROL, Keys.SUBTRACT)).perform();
- 使用 webdriver 定位 html 标记:
driver.findElement(By.tagName("html"))
.sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
- 使用 javascript:
engine.javaScript.execute("document.body.style.zoom = '75%'");
engine.javaScript.execute("document.body.style.webkitTransform='scale(.75)'");
- 使用机器人类:
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 年了,似乎不再起作用,如果有任何帮助,或者是否有其他解决方案来解决窗口大小问题,将不胜感激。试图绕过专门为网格创建单独的对象引用。
解决方案
推荐阅读
- css - 如果无效,CSS 变量默认为 SVG 填充
- google-cloud-platform - 如何修复 terraform 资源“google_cloud_scheduler_job”的“错误 400:'job.pubsub_target.data' (TYPE_BYTES) 的值无效”
- amazon-web-services - 无服务器授权者作为 AWS 用户池
- c# - 从由 Form 1 创建的 Form 2 更新 Form 1 中的控件
- amazon-dynamodb - 从 AWS Dynamodb CLI 查询 GSI
- java - 如何将 2 个 HashMap 合并在一起?
- python - 满足条件时如何求第一行与该行的时间差?
- python - 如何使用 if 条件捕获函数返回值
- ruby - Parse Recursive Collect Deep Nested Category XML children with parents Ids
- ruby - 如何将 Ruby 数组导出到单个 csv 行中?