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,其他的坑一堆,网上资料更少。

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


↙↙↙阅读原文可查看相关链接,并与作者交流