除了在Selenium中使用window()。setSize之外,还有其他选择吗?

时间:2019-01-03 16:28:16

标签: java google-chrome selenium-webdriver

随着Chrome浏览器的最新更新,我们针对移动浏览器的UI测试在适用于Windows的Chrome浏览器上失败了。

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

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

但是该网站只能在chrome浏览器上的实际移动设备上正常加载。

硒中是否有替代方法可以替代chrome浏览器设置的默认最小浏览器宽度。

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

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

1 个答案:

答案 0 :(得分:0)

一段时间以前,我曾使用Selenium / ChromeDriver和Python。希望这仍然适用。

我认为您不仅需要解决错误的解决方案,还需要改变管理 mobile 测试的方式。我鼓励您检查我的经验是否也适用于您的情况。

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

考虑一下,这很有意义。

因此,我鼓励您再次检查/验证您的硒测试(在移动模式下)正在有效地更改浏览器窗口大小-即,我担心您一直在做网页以相同的分辨率渲染...(模拟)手机的屏幕分辨率。

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

对于Chrome移动模式,我的代码通过将手机屏幕分辨率更改为(<,y)为每个浏览器窗口分辨率(x,y)创建一个新的 ChromeDriver 实例。 x,y);您可以使用ChromeDriver实验性选项来完成此操作,代码如下。

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

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);

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

我发现没有办法在相同的实例上进行在线:-)

请分享您的发现,

致谢

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

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