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)
以这种方式,便可做登录和搜索等操作。
接下来可以再定义一些测试用例,然后操作一下页面元素了。
共有1条评论
添加评论
imldy
2023年4月30日 18:33可以