架构师_程序员

查看: 309|回复: 2

[资料] .Net/C# Selenium 自动化测试获取cookie值

[复制链接]
发表于 2020-7-5 11:44:34 | 显示全部楼层
需求

由于模拟请求登录太复杂,我们想使用  Selenium 打开谷歌浏览器获取登录后的 cookie 值,然后携带 cookie 内容,请求该网站的相关接口,从而实现自动化测试。

Selenium

Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。

首先,我们新建一个 c# 的控制台项目,项目名称为“chrome-cookie-demo”,.net framework 版本为 4.7.2.

nuget命令如下:

安装完成Selenium.WebDriver.ChromeDriver后,会在项目debug目录生成 chromedriver.exe 文件。
Selenium.WebDriver 理解为一个抽象的接口,然后由每个浏览器自己去实现这个接口,Selenium.WebDriver 会调用 Selenium.WebDriver.ChromeDriver(chromedriver.exe),chromedriver.exe 会根据获取到的参数,启动本机安装的谷歌浏览器,然后进行相应的操作。

当然,还有一个前置条件,电脑必须安装谷歌浏览器(chrome)

代码如下:

报错如下:


System.InvalidOperationException: session not created: This version of ChromeDriver only supports Chrome version 83

QQ截图20200705101646.jpg

意思就是当前驱动不支持谷歌浏览器的83版本,查看本机安装的版本如下:

QQ截图20200705101657.jpg
(版本 71.0.3578.98)

升级本机的谷歌浏览器,然后重启即可解决(或者安装符合要求的浏览器版本)。

我们尝试重新运行 chrome-cookie-demo 项目,会发现可以正常打开本站,但是,网页处于未登录的状态。当点击浏览器打开本站的时候,状态为已登录状态。

解决办法为,设置 user-data-dir 参数,代码如下:

我们重新启动程序,会报错如下:

未经处理的异常:  OpenQA.Selenium.WebDriverException: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir
   在 OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   在 OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
   在 OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
   在 OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
   在 OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options)
   在 chrome_cookie_demo.Program.Main(String[] args) 位置 C:\Users\itsvse_pc\source\repos\chrome-cookie-demo\chrome-cookie-demo\Program.cs:行号 36

大体意思为,文件夹已经被占用,请更换,解决办法:关闭自己打开的谷歌浏览器,把用户数据文件夹给我们写的“chrome-cookie-demo”程序使用

获取网页cookie

driver.manage().getCookies();   // Return The List of all Cookies
driver.manage().getCookieNamed(arg0);  //Return specific cookie according to name
driver.manage().addCookie(arg0);   //Create and add the cookie
driver.manage().deleteCookie(arg0);  // Delete specific cookie
driver.manage().deleteCookieNamed(arg0); // Delete specific cookie according Name
driver.manage().deleteAllCookies();  // Delete all cookies

文档:https://www.selenium.dev/documentation/en/support_packages/working_with_cookies/

我们测试获取所有网页cookie

发现,可以读取到“HttpOnly”的cookie信息,如下图:

QQ截图20200705105307.jpg

当然,我们需要将cookie信息转换成字符串,然后模拟请求提交接口,源码中附上转换成字符串的方法。

源码下载:

游客,如果您要查看本帖隐藏内容请回复


(完)




上一篇:EF(CodeFirst) + MySQL
下一篇:MSSQL 条件查询 WHERE 忽略条件
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-7-5 12:46:59 | 显示全部楼层
看成好像不错
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2020-8-18 10:45:14 | 显示全部楼层
学习中。努力学习中。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-9-25 01:57

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表