Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

Python加Selenium自动化测试知乎网站(一)配置启动浏览器



做web的自动化测试时,很多项目都会用selenium来模拟用户操作行为。虽然在测试金字塔中这种用户层面的测试脚本并不需要做太多,因为人力时间消耗和稳定性都会弱于接口测试及单元测试,但是这也是不可缺少的,至少端到端的功能测试是需要的,以覆盖用户的真实场景。

这里会有一系列文章来分享selenium相关的使用,包含配置、操作元素、封装公用组件、提高稳定性等。这里以知乎网站为例来模拟用户行为,也方便看到效果。

自定制测试框架相关的会在另一个系列中分享。

Python还是建议3.6以上,安装就不叙述了。

先用virtualenv安装一个虚拟环境(windows上activate的命令不一样):

pip install virtualenv
virtuanenv venv
source venv/bin/activate

接着安装selenium:

pip install selenium

其实用得最多的是selenium webdriver, IDE和Grid用得比较少。关于selenium webdriver如何工作的,可以看这篇:Selenium Webdriver是如何工作的

现在还需要配置浏览器driver到环境变量里,先从如下地址中下载对应类型和版本的driver,比如chrome需要chromedriver,并需要对应上当前浏览器的版本;

浏览器 driver 下载地址
Chrome chromedriver 官方 ,taobao镜像
Firefox geckodriver 官方 ,taobao镜像
IE IEDriver  官方
Edge edgedriver  官方
Safari safaridriver Mac系统内置

下载存放后,可以把driver的路径添加到环境变量中,然后可以验证一下,比如命令行中输入chromedriver会得到类似如下输出,那么就说明能正常使用了:

$ chromedriver
Starting ChromeDriver 88.0.4324.96 (68dba2d8a0b149a1d3afac56fa74648032bcf46b-refs/branch-heads/4324@{#1784}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

接着运行一点代码,启动浏览器看看:

from selenium import webdriver

zhihu_url = "https://www.zhihu.com/topic/19552832/hot"
driver = webdriver.Chrome()
driver.get(zhihu_url)
input("press any key to continue")
driver.close()
driver.quit()

在这里打开了知乎上的python话题页面,然后等待键盘输入后会退出浏览器。

但是知乎是有反爬的机制,虽然我们也不是去爬数据,只是模拟浏览器上的操作,但是webdriver启动的浏览器中会带有相关的信息,会被知乎给屏蔽部分请求,比如直接selenium登录或者搜索时,是会得到403的错误的。当然只是查看回答或者话题之类的不会有403错误。

我们目前只关注seleniu的一些用法,于是采用了网上的一种方案来间接处理一下这个403的问题。

以Mac系统为例,利用devtools,用命令行启动chrome浏览器,指定remote-debugging-port(这个端口可以是自定义的):

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir=/Urs/user/Downloads/

此时已经打开了chrome浏览器,selenium便接管该浏览器进程,于是之前的语句会被替换成如下:

from selenium.webdriver.chrome.options import Options

# driver = webdriver.Chrome()  #注释掉,换做下面的
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = "chromedriver路径"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)

以这种方式,便可做登录和搜索等操作。

接下来可以再定义一些测试用例,然后操作一下页面元素了。

下一篇:  Python加Selenium自动化测试知乎网站(二)操作页面元素
上一篇:  Mac上Redis的安装配置

共有1条评论

添加评论

imldy
2023年4月30日 18:33
可以