注:该文章转载自公众号RobotFramework,作者 齐涛-道长,我被该问题困扰了2天,多亏遇到道长,在此说声谢谢。
原文:
这个错误已经成了近期qq群提问率第一的问题了。究其原因,还是大家从自动化测试入手都喜欢做web自动化有关(当然我博客上的例子也是web自动化测试),今天赶紧来解决一下这个问题。
文章比较长,没准备录音,图片小的请点击一下图片然后手动放大了看。
新手同学出现这个问题的时候经常容易慌乱,然后就马上迫不及待的把问题抛到qq群里,这里我来告诉大家遇到这个问题该怎么办。我们分别从常见的几个浏览器来看看:
1、Firefox
先来看一个案例,我这里主要是用百度做了个搜索。
然后我运行了一下,和新手们一样的情况出现了
此时,很多人第一反应就是把下面这个截图发到群里:
又或者是直接问,为什么我的浏览器打不开,报错 No Browser is open ?拜托,请不要只把你以为是错误信息的内容发出来,只发这一点内容的谁也不知道是什么情况。难道你就没有看到下面一句么:
更有甚者把前面图中红色的 ‘Sevice’ object 啥啥啥的发给我。对于这些新手来说,我觉得可以理解,毕竟对rf不熟悉,遇到问题了就慌乱了。所以我一般会和他说一句:你敢把截图再截大一点么?当然有的人说我下面那个框看不到内容是空白的,请去本公众号里回复目录,查看《ride日志不见了》那篇。
这里最核心的错误是 ‘geckodriver’ executable needs to be in PATH. 其实翻译过来很简单,就是这个叫 geckodriver 的可执行程序需要放在一个叫 PATH 的地方。
PATH 这里大写,实际上指的是我们每个人操作系统里的环境变量 PATH,它有什么用呢?简单举例比如说你的 Python 安装在 C:\Python27\ 目录,默认情况下,你想在其他目录执行 Python.exe 这个命令的时候,系统是找不到这个程序的,你可以写 C:\Python27\Python.exe ,这样就能找到了。但是写这么长很麻烦,所以就有这个 PATH 的环境变量来帮助你,PATH 的意思是路径,实际上就是如果你把 C:\Python27\ 添加到 PATH 的配置中,那么就等于你访问Python.exe文件有了一个路径了,你不需要再输入前面的路径,系统会自动去 PATH 配置的路径里去找的。
geckodriver 是什么鬼呢?实际上以前在Selenium2.0的时候,默认是带了Firefox的浏览器的驱动的,所以当时不需要装什么,就可以直接打开Firefox进行自动化测试。只是当时需要输入 Firefox 的配置文件路径 ff_profile_dir,在2.0时代很多人打不开Firefox 多半是这个 ff_profile_dir 的问题。
而现在Selenium3.0已经出来了,很多人用 pip 新安装 Selenium2Library 的时候,默认就下载了最新的 Selenium3.0了,而在3.0里不再有 Firefox 的驱动了,Mozilla 也把 Firefox 的 driver 独立发布出来了,而这个 driver 就是 geckodriver 了。当我们在案例中用 Open Browser 打开浏览器的时候,默认如果我们不告诉它用什么浏览器,它是去打开 Firefox 的。而要打开 Firefox 并能后续接收到我们让它执行什么操作的指令的,都是靠这个 geckodriver 。
所以这个问题解决的方案就是去下载 geckodriver ,然后放到一个 PATH 环境变量的路径里,通常这个路径我建议是你的 Python 的安装目录,因为本身我们要用 Robotframework 的时候,也是需要把 Python 的安装目录和 Python\Scripts 目录都加入到环境变量里才能正常使用的。
geckodriver 的下载地址:
https://github.com/mozilla/geckodriver/releases
这里我也做了一个 gif 动画,但是太大了,我只能放到新浪图床了。里面还有一个错误,什么 Firefox binary 找不到的,解决方案也在 gif 里了(约7.3M):
http://t.cn/RfOxEVi
2、Chrome
Chrome 的案例也是和 Firefox 类似的。
当然错误也是类似的:
并且它还很友善的告诉你去哪个网站下载,不过它给的网站要科学上网才行,但是下载 chromedriver 的网站却不需要科学上网,直接就能访问。两个地址我都给了,如果你能进入官网的话还能看到一些版本说明之类的。
https://sites.google.com/a/chromium.org/chromedriver/home
http://chromedriver.storage.googleapis.com/index.html
不过除了 in PATH 的错误,大家在用 chromedriver 的时候还可能会遇到一个错误:
WebDriverException: Message: unknown error: Chrome version must be >= 53.0.2785.0 (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 6.1.7601 SP1 x86_64)
这里的关键信息是 Chrome version must be >= 53.0.2785.0,并且给出了 Driver info: chromedriver=2.25.426923,后面还有一些系统信息。这里的意思是说因为你用的 chromedriver 是2.25的,那么你的浏览器的版本一定要在53.0以上才行。而我出现这个错误的版本是51.0的。解决方案呢,请看 gif 动画(约3.2M):
http://t.cn/RfOxiNO
3、IE
IE 的案例也和前两个差不多的,只不过之前我为了验证一个关键字的用法写了个例子在里面,可以先忽略7、8、9这几行。
IE 的报错信息如下:
同样的,人家也是很友好的给出了下载地址,可惜你们就是不看,这个地址也是直接就可以访问的。
http://selenium-release.storage.googleapis.com/index.html
当然 IEDriver 的版本最好和 Selenium 的版本是一样的,不过我后面动画里用的是2.53.1的 IEDriver,也是一样可以在 Selenium3.0下使用的,当然最好还是下3.0的Driver。同样的我也做了一个 gif 动画(约1.9M):
http://t.cn/RfOqxXV
4、总结
前面那些错误信息里的英语都是最基础的英语了,我实在想不出为什么有很多人在 qq 群里等翻译,比如说 IEDriver 还有可能遇到的错误是 Protect Mode in 4 zones must be same ( enable or disable ),很多人不知道 Protect Mode是啥,最直接的翻译(不知道的以后去问度娘),Protect 是保护,Mode 是模式,所以连起来就是保护模式,那么在你的 IE 选项里慢慢找一下哪里是保护模式,如果你用的是英文版浏览器应该更好找了。找到之后,再看看啥是 zone,same是啥意思,enable 是啥意思,然后你就明白你该怎么解决这个问题了。如果这几个单词不明白什么意思的请问度娘。又比如说可能还有个几个浏览器都可能遇到的问题 zoom 什么的,翻译去问度娘吧。
总结一下,其实只要大家细心一些,自己都可以发现错误在哪里,然后再勤快一点(问度娘)或以前勤快一点(学英语),问题可能早就解决了,或者知道该怎么求助别人了。说到英语,很多人以为我的英语很好,其实根本不是,我的英语四级是在大四那年才考过的63.5分。我学习 Robotframework 的时候都是看官方的原版文档,很多人怕读英文文档,这有什么怕的呢,你自己偷偷看又没人知道,而且这些官方的文档一般都不会使用太偏僻的词汇,很多都是基础的英文单词,再说了,遇到不会的单词我自己也是去找度娘或者谷歌翻译呢。
好吧,说了这么多,实际上是希望大家能掌握一点主动找问题关键点的方法。如果你真的不会找问题关键点也没关系,那就不要自以为是的只截一点点的图来提问,很多人都是只发一点错误信息,然后到处求助。我只想说不要浪费你自己的时间和大家的时间,提问题也要讲究方式方法,因为大家看到了,前面很多种可能都会导致 No Browser is open 的报错,你只发这个信息,没人知道原因的。
既然你不会找问题,那么就请提供完整的信息出来,完整的信息是什么,你的案例,你的 RIDE 错误截图(要完整的),如果没有日志的也可以在 RUN 的界面点击 log 按钮,在报告里也会有错误信息的,如果你的 log 是灰色的,在你的运行信息里也有 log.html 的路径,自己打开看。
总之,方法总比问题多,不要在一棵树上吊死。希望看完了这篇文章后你们都能知道 No Browser is open 都是什么鬼了,也都知道这些 Driver 是干啥的,弄明白这些 Driver,以后你们就是老司机了~