通用技术 Jenkins+Gitlab 执行 selenium 为何报版本不正确的问题

醋精测试媛 · 2020年10月28日 · 最后由 醋精测试媛 回复于 2020年11月03日 · 2713 次阅读

报错信息如下所示:

上面三行

C:\WINDOWS\system32\config\systemprofile\AppData\Local\Jenkins.jenkins\workspace\yango-web>c:
C:\WINDOWS\system32\config\systemprofile\AppData\Local\Jenkins.jenkins\workspace\yango-web>cd C:\Users\Administrator\PycharmProjects\yangoWebTest 
C:\Users\Administrator\PycharmProjects\yangoWebTest>python yango_web_test.py 

是 build 里面执行的命令行。
这个版本的错误我知道,是因为 chrome 版本和 chrome driver 版本不一致导致的,但是我很确定我的是一致的,因为在 pycharm 中可以运行的。所以我觉得可能是 gitlab 的问题。但是不知道具体是为什么。

共收到 19 条回复 时间 点赞

看一下你 pycharm 里的 chrome 和 webdriver 版本分别是什么

我要怎么才能和你一样优秀?

两个办法,要么升级 chrome 版本到 87,要么降级 chrome driver 至能支持 chrome86 的版本。
PS:看报错啊,这么明显的错误提示~

Kevin Gu 回复

pycharm 下可以运行,并且我很确定两个都是 86 的

Jerry li 回复

都是 86

怎么确定的?可以详细说下吗?

提醒一下,不能认为用的同一台电脑就确定一样的哦。加载的环境变量和配置不一样,最终用到的版本也会不一样。jenkins 打开的 shell 本身就和我们在操作系统界面打开的有差异的,就算同一台电脑也有差异。

PS:有点没看懂正文的内容和 jenkins 有啥关系,标题有提到 jenkins ,正文完全没提及。建议也详细说下到底 jenkins、gitlab 和 appium 在你这个环境下是怎么串起来的。

陈恒捷 回复

因为当时在 pycharm 上面遇到这个问题,所以我当时在本地的 webdriver 换到了和 chrome 一样的版本,从而 pycharm 上面才可以运行的,后面 chrome 的版本没有改变。
在 Jenkins 中,
(1)在配置管理中

(2)在项目配置中,我仅仅将
git 中的 url 和凭证换成了 gitlab 的 url 和 token,其他都没有改。

能请教下,你的 selenium 目录结构,一般都是怎么布置的? 能给个截图不?

自娱自乐 回复

PO 模式,网上很多哦
page object: https://www.cnblogs.com/zhaikunkun/p/12730750.html
这个虽然是 appium 的,但是差不多吧

不建议用这种 PO 设计
页面对象建议只维护元素定位,动作可以再抽象一层独立出来

fiskeryang 回复

不同的页面对象动作不同,如何再抽象一层呢,对于那些公共的动作,PO 有 basepage

是不是 Jenkins 运行的节点不是你本机的环境呢?或者你有两套 webdriver?

爱吃米饭 回复

请问如何知道 Jenkins 运行的节点是否是本机环境呢,我只有一套 webdriver,把它放在了两个位置,python 的 script 下和 chrome 的安装目录下。

好吧,大致看懂了。

  • 你可以排除 gitlab 这个原因了,gitlab 或者 git 都只管代码,不管环境。你现在的配置能保障 pycharm 拉到的代码和你 jenkins 拉到的代码一样,那这个部分的职责就完成了。

  • selenium 获取具体 webdriver 执行文件,默认是通过遍历环境变量里配置的路径实现的。从现象上看,chromedriver.exe 在你这台电脑有不止一个,而且版本不一样。可以所有盘都搜索一下,把多余的都扔到回收站,做到这台电脑只保留 1 个 chromedriver.exe 文件,然后再试试。

陈恒捷 回复

不好意思,可能上面的表达不是很好。
我按照您的想法,去找了一下 chromedriver.exe 的位置

我删掉了 python 下面那个,运行 pycharm 没有问题,运行 Jenkins 仍然有问题

我之所以觉得是 gitlab 配置的问题的原因是,用 Jenkins 运行好像没有像运行 github+jenkins 那样有一个拉取代码的过程,虽然 github 应该会很快。

这个文件夹应该是 Jenkins 的工作环境吧,之前我用 github 会有一个和项目同名的文件,下面的东西和 push 上去的一样,现在没有。
当然,我也有尝试有 git 和没有 git 的单个项目配置。有 git 上面有:

没有 git 就直接是:

但是两者的错误原因都是版本不对。

我之所以觉得是 gitlab 配置的问题的原因是,用 Jenkins 运行好像没有像运行 github+jenkins 那样有一个拉取代码的过程,虽然 github 应该会很快。

把你全部日志贴上来,特别是最开始的 50 行?这个拉取代码过程应该都会有的,只是快慢不同而已。日志里都应该会有。

另外,针对 chromedriver.exe 可能有多个的,删除后还是不行,可以试下改下代码,使用指定路径的 chromedriver 试试:

self.driver = webdriver.Chrome('C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe')

PS:多口问一句,你确认你电脑只装了一个 chrome 浏览器吧?

  • 以下是报错的详细日志: 16:32:25 Started by user Li Shengjiao 16:32:25 Running as SYSTEM 16:32:25 [EnvInject] - Loading node environment variables. 16:32:25 Building in workspace C:\WINDOWS\system32\config\systemprofile\AppData\Local\Jenkins.jenkins\workspace\yango-web 16:32:25 [Checks API] No suitable checks publisher found. 16:32:25 No emails were triggered. 16:32:25 [yango-web] $ cmd /c call C:\WINDOWS\TEMP\jenkins10500894596543799942.bat 16:32:25 16:32:25 C:\WINDOWS\system32\config\systemprofile\AppData\Local\Jenkins.jenkins\workspace\yango-web>c: 16:32:25 16:32:25 C:\WINDOWS\system32\config\systemprofile\AppData\Local\Jenkins.jenkins\workspace\yango-web>cd C:\Users\Administrator\PycharmProjects\yangoWebTest 16:32:25 16:32:25 C:\Users\Administrator\PycharmProjects\yangoWebTest>python yango_web_test.py 16:32:29 Traceback (most recent call last): 16:32:29 File "yango_web_test.py", line 6, in <module> 16:32:29 from test_cases.TestCommunityComposition import TestCommunityComposition 16:32:29 File "C:\Users\Administrator\PycharmProjects\yangoWebTest\test_cases\TestCommunityComposition.py", line 13, in <module> 16:32:29 from utils.Run import driver 16:32:29 File "C:\Users\Administrator\PycharmProjects\yangoWebTest\utils\Run.py", line 38, in <module> 16:32:29 run = Run() 16:32:29 File "C:\Users\Administrator\PycharmProjects\yangoWebTest\utils\Run.py", line 20, in __init__ 16:32:29 self.driver = webdriver.Chrome(chrome_options=options) 16:32:29 File "F:\lsj\Python\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 76, in __init__ 16:32:29 RemoteWebDriver.__init__( 16:32:29 File "F:\lsj\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__ 16:32:29 self.start_session(capabilities, browser_profile) 16:32:29 File "F:\lsj\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session 16:32:29 response = self.execute(Command.NEW_SESSION, parameters) 16:32:29 File "F:\lsj\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute 16:32:29 self.error_handler.check_response(response) 16:32:29 File "F:\lsj\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response 16:32:29 raise exception_class(message, screen, stacktrace) 16:32:29 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 87 16:32:29 Current browser version is 86.0.4240.111 with binary path C:\Program Files\Google\Chrome\Application\chrome.exe 16:32:29 16:32:29 16:32:29 C:\Users\Administrator\PycharmProjects\yangoWebTest>exit 1
  • 确定只有一个浏览器
  • 应该是 gitlab 配置的问题,刚刚用码云再试了一次,好像 ok 了

动作无非就是哪些 单击 双击 输入 切 iframe 访问 url 之类的 一般也就几十个 可以抽象出来 将元素和这些动作进行任意的组合

fiskeryang 回复

BasePage 抽象所有动作,每个页面维护元素,上面的网址只是一个例子,入门的,当然 po 有更好的优化方案

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