前端测试 熟悉 phantomJs 的,请教个坑

cctodd · 2017年12月05日 · 最后由 cctodd 回复于 2017年12月08日 · 2209 次阅读

PhantomJs 263++,定位不到元素的问题,不知道有没有同学遇到过,借网上有位朋友的提问如下,跟我的问题一样:

框架:Selenium+Java+testNG+Jenkins
背景:Jenkins 部署在了 Linux 环境,在自己本地的 Windows 环境跑测试程序都没问题问题描述:因为 Linux 环境不能执行 exe,所以直接在服务器上安装了 PhantomJS,代码中这样描写的:
DesiredCapabilities caps = new DesiredCapabilities();
((DesiredCapabilities) caps).setJavascriptEnabled(true);
((DesiredCapabilities) caps).setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,"/opt/env/phantomjs-2.1.1-linux-x86_64/bin/phantomjs");
driver = new PhantomJSDriver(caps);

但是上传到 Git 上再用 Jenkins 来 Build 的时候,报错了,提示说找不到元素:

[ERROR - 2017-11-02T03:16:02.297Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1509592562254 phantomjs://platform/console++.js:263 in errororg.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException; nested exception is java.lang.reflect.InvocationTargetException: nulljava.lang.reflect.InvocationTargetExceptionCaused by: org.openqa.selenium.NoSuchElementException: {"errorMessage":"Unable to find element with name 'login_userName'"}
大家有什么经验来判断这到底是哪里的问题吗?

附:我自己的排查方法

  1. 有时候在本机 windows 调试的时候,也会报这个错误,找到原因是 ssl 证书过期,选择忽略 ssl 错误
    String [] phantomJsArgs = {"--ignore-ssl-errors=true","--ssl-protocol=tlsv1"};
    dcaps.setCapability(
    PhantomJSDriverService.PHANTOMJS_CLI_ARGS,
    phantomJsArgs);

  2. 然而同样版本 2.1.1 的 phantomJs,在 centos 上用 Jenkins build 的时候,还是会报这个错误,尝试显示等待一段时间,然而无效,不是元素加载慢的原因

  3. 用 Chrome headLess 替代 phantomJs,其他的坑一堆,网上资料更少。

如果有朋友遇到过类似问题,分享下解决办法,感激感激

共收到 7 条回复 时间 点赞

非常谢谢耐心的回答,xpath 定位不到,换 css 可以,尝试等待了一段时间等元素加载完毕,但是 button 定位的到点击不了,比较奇怪
截图看不到什么异常,打算换 Chrome Headless 试试
再次谢谢

恒温 回复

额这个跟 phantomJs 有关系么

@Handsome2734 好的谢谢,我用 Chrome headless 试试

恒温 回复

我的违规帖子已经修改好了,麻烦帮我看看那里还有不对的地方。

chrome headless +1
PhantomJS 调试太麻烦了

  1. phantomjs 注定会被 chrome headless 吃掉,不建议继续使用
  2. phantomjs 在对 ES6 的支持上天生有坑,前端使用 ES6 的网站都不建议用 phantomjs 去跑。
  3. 看错误信息的话,楼主用的是 name locator?建议楼主可以换下定位器试试,比如 css locator 或者 xpath 试试。
  4. 提示找不到元素除了真 BUG 或者 locator 真变更了以外,通常来说要么是元素还没有加载完成,要么就是 URL 都跳转都没有执行到。这种时候建议在错误的步骤之前截图排查 (截图命令执行后,会在截图中渲染出页面)。

希望有能帮到你。

现在都用 puppet 了吧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册