一.有界面时可以展示的元素,无头模式报错
element not interactable
解决方法:
通过错误截图发现,页面上有该元素,但是页面不够大,没有显示想定位的元素。
1.设置浏览器的分辨率大小:
options.addArguments("window-size=1920x3000");
2.将页面往下拉:
((JavascriptExecutor) driver).executeScript("document.documentElement.scrollTop=100000");
二.上传文件用例执行失败,autoit和robot均依赖窗口运行,无法在无头模式下正常应用
解决办法:
如果上传图片的元素为input,定位在此input上,sendkeys去传递图片路径完成上传动作。非input元素暂时没有找到特别好的办法。
checkviewPage.uploadimg_input().get(i).sendKeys("C:\\Users\\Administrator\\Desktop\\hpia图片\\brand_logo_1.png");
三.无头模式无法正常下载
在使用无头模式时,我们发现原先的下载测试用例断言失败,但是在浏览器常规模式时,用例是可以跑通的。试了很多办法,均无法在无头模式下正常下载。最后发现借助httpclient可以完成。代码如下
System.setProperty("webdriver.chrome.driver", "/chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--test-type");
options.addArguments("--headless");
options.addArguments("--disable-extensions"); //to disable browser extension popup
ChromeDriverService driverService = ChromeDriverService.createDefaultService();
ChromeDriver driver = new ChromeDriver(driverService, options);
Map<String, Object> commandParams = new HashMap<>();
commandParams.put("cmd", "Page.setDownloadBehavior");
Map<String, String> params = new HashMap<>();
params.put("behavior", "allow");
params.put("downloadPath", "C:\\Users\\Administrator\\Downloads");
// System.out.println(params.get("downloadPath"));
commandParams.put("params", params);
ObjectMapper objectMapper = new ObjectMapper();
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
String command = objectMapper.writeValueAsString(commandParams);
String u = driverService.getUrl().toString() + "/session/" + driver.getSessionId() + "/chromium/send_command";
HttpPost request = new HttpPost(u);
request.addHeader("content-type", "application/json");