我们提供安全,免费的手游软件下载!
在日常工作和学习中,自动化测试时,页面加载时可能会出现许多不重要或不相关的内容。为了提高页面加载速度和节省资源,我们可以选择不加载这些内容。例如,当页面上有大量图片而我们并不关心图片内容时,可以选择不加载图片。在这种情况下,我们可以使用Route类来拦截和修改请求。
在日常工作和学习中,自动化测试的时候:在加载页面时,可能页面出现很多不是很重要或者不是我们所关注的,这个时候我们就可以选择不加载这些内容,以提高页面加载速度,节省资源。例如:可能页面上图片比较多,而我们又不关心图片内容。那么,在加载页面时,可以选择不加载图片,以提高页面加载速度。这里我们主要用到一个 Route类拦截修改请求。
Route类介绍官方API的文档地址: https://www.cuketest.com/playwright/docs/api/class-route/
在Playwright中,`Route`类用于捕获和修改请求和响应。它允许您拦截和处理特定的网络请求,以模拟不同的行为或进行自定义操作。
您可以使用`page.route()`方法创建`Route`对象,并指定要拦截的请求URL或使用正则表达式进行匹配。
一旦创建了`Route`对象,您可以通过调用`route.continue()`、`route.fulfill()`或`route.abort()`来控制请求的进一步处理。
还可以通过`route.request()`和`route.response()`属性来访问请求和响应对象。
使用`Route`类,您可以拦截和修改网络请求,从而实现各种目的,如网络请求的模拟、修改请求头、延迟响应等。它是一个非常有用的工具,可用于各种Web自动化和测试场景中。
abort()
取消匹配的路由请求
fulfill(response)
伪造服务器返回数据,如body、headers等
continue(request)
伪造路由请求数据
fallback(request)
伪造路由请求数据,允许多次使用
如何使用`Route`类的`continue()`方法继续请求呢?
宏哥这里以这个dog的API: https://dog.ceo/api/breeds/list/all 为例,判断开头部分URL如果相同继续请求返回数据,如果不同则不会执行继续请求的操作。首先看一下API请求后的数据,如下图所示:
1. 运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2. 运行代码后电脑端的浏览器的动作。如下图所示:
在上面的例子中,我们创建了一个简单的Playwright脚本,在页面加载后监听和拦截所有的请求。在`intercept_request`函数中,我们判断如果请求的URL以"https://dog.ceo/"开头,就打印一条信息,并调用`route.continue()`来继续请求。
当运行这个脚本时,所有的请求都会被拦截,但是只有那些URL以"https://dog.ceo/"开头的请求会被继续。
Route
类的
fallback()
方法可以用于指定当请求未匹配到任何拦截规则时的回退行为。
为了方便演示,宏哥这里仍以度娘为例,判断部分URL匹配成功,继续执行请求,反之回退。
1. 运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2. 运行代码后电脑端的浏览器的动作。如下图所示:
以上例子:当页面加载后会监听和拦截所有请求。在intercept_request函数中,我们根据请求的URL进行条件判断。如果URL以"https://www.baidu.com/api"开头,我们打印一条拦截消息并调用route.continue()来继续请求。否则,我们打印一条回退消息并调用route.fallback()方法,允许请求继续发送和接收响应。这里没有匹配到,触发回退行为,允许请求正常继续。
最后我们来看一下其一个比较重要的属性:匹配到的 request 。它可以很容易清楚地让我们看到请求的方法。用法其实很简单,和其他类的属性一样,直接使用route调用就可以。
1. 运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2. 运行代码后电脑端的浏览器的动作。如下图所示:
今天主要分享和介绍了使用playwright如何继续请求、请求回退的方法以及route的一个比较有用的属性,对了一定要注意continue_方法和continue方法区别,宏哥大意了,代码一直提示报错:'continue' outside loop 。好了,今天时间也不早了,宏哥就讲解和分享到这里,感谢您耐心的阅读,希望对您有所帮助。
热门资讯