java - 在 Selenium 中是否有使用 window().setSize 的替代方法?

标签 java google-chrome selenium-webdriver

在最新的 Chrome 浏览器更新后,我们针对移动浏览器的 UI 测试在 Windows 版 Chrome 浏览器上失败了。

我一直在用这个: driver.manage().window().setSize(dimension);

它们失败了,因为 UI 元素与最小 Chrome 浏览器宽度的预期不匹配。

但是该网站在 Chrome 浏览器上的实际移动设备上可以正常加载。

selenium 中是否有替代方案可以覆盖 chrome 浏览器设置的默认最小浏览器宽度。

driver.manage().window().setSize(dimension);

我尝试将浏览器宽度设置为 385,但在 Windows Chrome 上它会自动重置为 540,这会导致验证失败

最佳答案

我以前曾使用过 Selenium/ChromeDriver 和 Python。希望这仍然适用。

我认为您需要稍微改变一下管理移动测试的方式,而不仅仅是为了错误的解决方案。我鼓励您检查一下我的经验是否也适用于您的情况。

就我而言,在桌面模式下的 Chrome 中设置浏览器窗口分辨率效果很好,但在 Chrome 移动模式下却遇到了问题。 在移动模式下,我无法使用setSize()设置分辨率,它实际上被忽略了,浏览器窗口大小始终是屏幕分辨率>“模拟”手机

仔细想想,也有道理。

出于这个原因我鼓励您仔细检查/验证您的 Selenium 测试在移动模式下是否有效地改变了浏览器窗口大小 - 即,我担心您总是在执行网页以相同分辨率渲染...(模拟)手机的屏幕分辨率。

因此,在我的代码中,我仅将 setSize() 代码用于桌面模式操作/测试。

对于 Chrome 移动模式,我的代码通过将手机屏幕分辨率更改为 ( x,y);您可以使用 ChromeDriver 实验选项来完成此操作,代码如下。

屏幕分辨率 x,y = 800,1280 的 Java 代码:

Map<String, Object> deviceMetrics = new HashMap<>();
deviceMetrics.put("width", 800);
deviceMetrics.put("height", 1280);
deviceMetrics.put("pixelRatio", 1.0);    
Map<String, Object> mobileEmulation = new HashMap<>();
mobileEmulation.put("deviceMetrics", deviceMetrics);
mobileEmulation.put("userAgent", "Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 5 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19");

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("mobileEmulation", mobileEmulation);
WebDriver driver = new ChromeDriver(chromeOptions);

您的代码应该停止驱动程序实例并为每个测试的分辨率重新创建一个新的驱动程序实例。

我发现无法使用同一实例在线完成此操作:-)

请分享您的发现,

问候

P.s:我一直使用pixelRatio = 1.0,我不提醒确切的含义,但我推断这对于现代设备来说是最合理的值。

P.s.2:提供的代码是我的Python代码的“映射”,未经测试

关于java - 在 Selenium 中是否有使用 window().setSize 的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026210/

相关文章:

java - Apache Ant 有条件地从模板复制文件并加载属性

带有 (C++) 子进程/线程或类似的 Java 进程

java - Maven testCompile 适用于 Java 9 Build 166,但适用于 Build 167 失败

java - Android:WAITING()主线程,而对话框在单独的线程中输入

javascript - 即使只有一个固定元素,chrome 应用程序滚动也不起作用

html - Chrome Mac OSX 10.9.5 上的后台问题

javascript - 通过 javascript 解析 CSS。 Edge 和 Chrome 之间的不一致

selenium-webdriver - ChromeDriverService 如何在 selenium 自动化中发挥作用

java - 在以下 HTML 的 Selenium webdriver 中出现 "Element is not currently visible and so may not be interacted with"错误

javascript - Node JS - 如何在同一 session 中逐一运行跨浏览器测试?