首页 > 其他分享 >【playwright学习】github create issue test

【playwright学习】github create issue test

时间:2024-07-03 12:08:47浏览次数:13  
标签:playwright get url pattern create github context issue page

from playwright.sync_api import sync_playwright,Page,Playwright,Browser,expect
import pytest
import random
import re
@pytest.fixture(scope="module",autouse=True)
def login_github(playwright:Playwright):
    chrome = playwright.chromium.launch(headless=False)
    context = chrome.new_context()
    page = context.new_page()
    page.goto('https://github.com/login')
    # Interact with login form
    page.get_by_label("Username or email address").fill("[email protected]")
    page.get_by_label("Password").fill("1***")
    page.get_by_role("button", name="Sign in", exact=True).click()

    # Verify login success
    # page.wait_for_url("https://github.com/jin-wen-xin")
    storage = context.storage_state(path="state.json")
    yield storage
    # Close browser
    context.close()
    #chrome.close()

def test_login_github(browser:Browser, login_github):
    context = browser.new_context(storage_state="state.json")
    page = context.new_page()
    page.goto('https://github.com/microsoft/playwright-pytest/blob/main/pytest_playwright/pytest_playwright.py')
    page.get_by_label("Open global navigation menu").click()
    page.get_by_role("link", name="Jinwenxin/frontblog").click()
    expect(page.get_by_label("Page context", exact=True).get_by_role("list")).to_contain_text("Jinwenxin")

def test_create_issue(browser:Browser, login_github):
    context = browser.new_context(storage_state="state.json")
    page = context.new_page()
    page.goto('https://github.com/Jinwenxin/frontblog/issues/new')
    # generate random issue title and description
    issue_title = "Test issue" + str(random.randint(1,1000))
    issue_description = "test issue description" + str(random.randint(1,1000))
    page.get_by_label("Title").fill(issue_title)
    page.get_by_placeholder(" ", exact=True).click()
    page.get_by_placeholder(" ", exact=True).fill(issue_description)
    page.get_by_role("button", name="Submit new issue").click()
    # Verify issue creation success
    # Verify url contains issue number
    pattern = r'.*/Jinwenxin/frontblog/issues/\d+$'
    url_pattern = re.compile(pattern)
    page.wait_for_url(url_pattern)
    #page.wait_for_event('framenavigated', lambda frame: "/Jinwenxin/frontblog/issues/" in frame.url and frame.url.split("/")[-1].isdigit())
    expect(page.locator("bdi")).to_contain_text(issue_title)
    expect(page.get_by_role("cell")).to_contain_text(issue_description)

值得看看的是wait_for_url方法

    def wait_for_url(
        self,
        url: typing.Union[str, typing.Pattern[str], typing.Callable[[str], bool]],
        *,
        wait_until: typing.Optional[
            Literal["commit", "domcontentloaded", "load", "networkidle"]
        ] = None,
        timeout: typing.Optional[float] = None
    ) -> None:

可以传字符串,pattern对象,还有callable对象

pattern得compile才行。。。我由于基础差,试了好久

wait_for_url 传pattern的话就是上面那么用。

传callable,就是自己定义一个传string,返回bool的方法。

url_validator 被赋予了 include_url 函数的引用,并且可以通过 url_validator  来调用 include_url函数,就像使用普通的函数一样。

 

def include_url(url:str)->bool:
    pattern = r'.*/Jinwenxin/frontblog/issues/\d+$'
    url_pattern = re.compile(pattern)
    return bool(url_pattern.match(url))

url_validator : Callable[[str], bool] = include_url

test里这样去使用:

page.wait_for_url(url_validator)

我再试试非得new一个引用吗?我直接用可以吗?哈哈也可以的。。。可能那样更清晰?

标签:playwright,get,url,pattern,create,github,context,issue,page
From: https://www.cnblogs.com/jin-wen-xin/p/18281370

相关文章

  • 【playwright学习】fixture和closure学习
    学习的话主要材料是官网:https://playwright.dev/python/docs/auth 基础的话,像我一样薄弱就可以了。会一些java,但python会的不多,用得很少。上手贼容易,但是selenium也不怎么难在学习之前,要弄清楚@pytest.fixture,closure(nestedfunc)是怎么回事。个人理解:fixture:(面试的时候那个......
  • GitHub每日最火火火项目(7.2)
    Asabeneh/30-Days-Of-Python:这是一个为期30天的Python编程挑战项目,旨在通过逐步引导的方式帮助学习者在30天内掌握Python编程语言。然而,实际完成这个挑战可能需要超过100天,学习者可以根据自己的节奏进行。该项目还提供了相关视频的链接(https://www.youtube.com/cha......
  • python: create Envircomnet in vscode 创建虚拟机
    先配置python开发环境 1.在搜索栏输入“>"或是用快后键ctrl+shift+P键就会显示”>",再输入"python:"   选择已经安装好的python的版本至当前项目中   2terminal下输入相关命令行操作,选进入虚拟机的的文件夹下cd.venv/scripts再进行激活虚拟机。输入ac......
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-1-环境准备与搭建
    1.简介Python+Playwright系列的文章还没有结束,就有好的小伙伴或者童鞋们私信公众号留言,问宏哥什么时候出Java语言的Playwright的自动化测试文章。本来想趁热打铁将Python+Playwright完结后,就开始Java语言的Playwright的自动化测试文章,但是好多人私信留言,索性就两个系列的文章......
  • Visual C++ generate uuid via UuidCreate and CoCreateGuid,get time now,write stri
    //ConsoleApplication3.cpp:Thisfilecontainsthe'main'function.Programexecutionbeginsandendsthere.//#pragmacomment(lib,"rpcrt4.lib")#include<windows.h>#include<chrono>#include<ctime>#include&l......
  • Two-factor authentication (2FA) is required for your GitHub account
    今天在尝试打开GitHub页面时,突然出现了一个错误提示:“Two-factorauthentication(2FA)isrequiredforyourGitHubaccount”(如图所示)。这个错误提示表明,GitHub账户需要启用双因素认证(2FA)才能继续使用。在网上找了一些办法可以解决但是太麻烦找了比较简单的方法  ......
  • 关于AndroidStudio中的onCreate方法
    onCreate方法是Android应用程序中的一个生命周期方法,它是每个Activity(活动)都必须实现的方法之一。具体来说,它是在Activity第一次创建时调用的方法,用于完成一些初始化设置和布局加载工作。主要作用设置布局:通过调用setContentView方法来加载指定的布局文件,将界面内......
  • 【git】github如何上传超过100MB大小的单个文件
    在使用GitHub进行版本控制时,默认情况下,单个文件的大小限制为100MB。如果你需要上传超过这个大小的文件,可以使用GitLFS(LargeFileStorage)。GitLFS是一种Git扩展,专门用于处理大文件,它将大文件替换为轻量级的指针,并将实际的文件内容存储在远程服务器上。1.安装从Git2......
  • Create Detailed Documentation and Export to DOCX
    CreateDetailedDocumentationandExporttoDOCXDr.Explainv6.8addstheabilitytoexporttotheMicrosoftWordDOCXformat,providinggreaterflexibilityfordevelopersandusersalike.Dr.ExplainbyIndigoByteSystemsisasophisticatedso......
  • 《最新出炉》系列入门篇-Python+Playwright自动化测试-52- 字符串操作 - 下篇
    1.简介在日常的自动化测试工作中进行断言的时候,我们可能经常遇到的场景。从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言。这个时候就需要我们对字符串进行操作,宏哥这里介绍两种方法:正则和字符串切片函数split()。2.测试场景宏哥在这里......