前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >selenium Chromedriver 无头模式(headless)问题汇总

selenium Chromedriver 无头模式(headless)问题汇总

原创
作者头像
Meccer
修改2021-07-13 15:02:56
8K0
修改2021-07-13 15:02:56
举报
文章被收录于专栏:测试学习之路

一.有界面时可以展示的元素,无头模式报错element not interactable

解决方法:

通过错误截图发现,页面上有该元素,但是页面不够大,没有显示想定位的元素。

1.设置浏览器的分辨率大小:

代码语言:javascript
复制
options.addArguments("window-size=1920x3000");

2.将页面往下拉:

代码语言:javascript
复制
((JavascriptExecutor) driver).executeScript("document.documentElement.scrollTop=100000");

二.上传文件用例执行失败,autoit和robot均依赖窗口运行,无法在无头模式下正常应用

解决办法:

如果上传图片的元素为input,定位在此input上,sendkeys去传递图片路径完成上传动作。非input元素暂时没有找到特别好的办法。

代码语言:javascript
复制
checkviewPage.uploadimg_input().get(i).sendKeys("C:\\Users\\Administrator\\Desktop\\hpia图片\\brand_logo_1.png");

三.无头模式无法正常下载

在使用无头模式时,我们发现原先的下载测试用例断言失败,但是在浏览器常规模式时,用例是可以跑通的。试了很多办法,均无法在无头模式下正常下载。最后发现借助httpclient可以完成。代码如下

代码语言:javascript
复制
 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");
    request.setEntity(new StringEntity(command));
    httpClient.execute(request);
    driver.get("http://www.seleniumhq.org/download/");
    driver.findElement(By.linkText("32 bit Windows IE")).click();

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.有界面时可以展示的元素,无头模式报错element not interactable
    • 解决方法:
    • 二.上传文件用例执行失败,autoit和robot均依赖窗口运行,无法在无头模式下正常应用
      • 解决办法:
      • 三.无头模式无法正常下载
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档