目录
方案实现思路:
方案一:
方案二:
方案实现思路:
依照上图所见,就知道,一个账号是pytest-playwright默认的环境,一个是 账号登录的环境
方案一:
直接上代码:
import time
from playwright.sync_api import Page, BrowserContext
import pytest
from pages.explore.explore import ExplorePage
from playwright.sync_api import expect
class TestLogin():
@pytest.fixture(autouse=True)
def for_each(self,page:Page):
self.login = ExplorePage(page)
# 打开页面1,已登录的账号进行操作
self.login.gotoURL()
yield
print('后置操作')
def testmore(self,playwright):
browser = playwright.chromium.launch(channel='chrome', headless=False)
context = browser.new_context()
page2 = context.new_page()
self.login2 = ExplorePage(page2)
# 打开页面2,未登录的账号进行操作
self.login2.gotoURL()
代码解读:
- 在case执行前,会自动调用for_each方法,这里面默认的登录用户就是conftest.py中配置的用户,执行case时,我们又重新打开浏览器,重新创建一个context上下文,这里我们就是账号2了,此时是未登录状态。此时就有了两个浏览器同时打开,第一个是登陆状态,第二个是未登录状态~
- 这种方式实现并不好,因为如果我们需要登录的话,很可能有些网站支持不了
方案二:
在conftest.py文件中来配置:
@pytest.fixture(scope='module')
def more_context(browser_context_args, browser, pytestconfig):
# 将browser_context_args中配置的信息复制到context_args中,除了storage_state【这个是登录用户的信息】
context_args = {k: v for k, v in browser_context_args.items() if k != 'storage_state'}
# 获取新的登录用户的信息,并且需要将\\替换为/,否则找不到文件
storage_state = str(pytestconfig.rootpath.joinpath('auth/cookie.json')).replace('\\', '/')
# 从文件中读取出新的登录用户的信息,并且将内容填充到context_args的storage_state中
# 关于新的登录用户信息,这部分,也可以不做,那就表示第二个用户是未登录状态,也可以满足一些自动化的测试点
with open(storage_state, 'r') as file:
context_args['storage_state'] = json.load(file)
# 根据新的context_args信息,来创建新的context上下文对象
context = browser.new_context(
**context_args
)
return context
上述中cookie.json的内容怎么来,可以看这篇文章:【pytest、playwright】构建POM项目,以及解决登录问题,allure环境问题
case中的实现:
import time
import playwright.sync_api
from playwright.sync_api import Page, BrowserContext
import pytest
from pages.explore.explore import ExplorePage
from playwright.sync_api import expect
class TestLogin():
@pytest.fixture(autouse=True)
def for_each(self, page:Page):
self.login = ExplorePage(page)
# 打开页面1,已登录的账号进行操作
self.login.gotoURL()
yield
print('后置操作')
def testmore02(self, more_context:BrowserContext):
page2 = more_context.new_page()
self.login2 = ExplorePage(page2)
# 打开页面2,未登录的账号进行操作
self.login2.gotoURL()
time.sleep(5)
print('账号2')
上述就会产生两个用户了,一个是playwright默认生成的,一个是我们手动创建的~