{"id":14978791,"url":"https://github.com/seldomqa/poium","last_synced_at":"2026-01-24T22:01:38.538Z","repository":{"id":37848471,"uuid":"154795650","full_name":"SeldomQA/poium","owner":"SeldomQA","description":"Page Objects design pattern test library, support selenium、appium、playwright, etc","archived":false,"fork":false,"pushed_at":"2025-04-06T08:14:17.000Z","size":43038,"stargazers_count":432,"open_issues_count":20,"forks_count":143,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-04-28T07:50:23.861Z","etag":null,"topics":["appium","pageobjects","playwright","python","selenium"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/poium","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SeldomQA.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-10-26T07:35:21.000Z","updated_at":"2025-04-09T02:19:30.000Z","dependencies_parsed_at":"2022-08-19T09:11:42.172Z","dependency_job_id":"5d2f2320-87e7-4696-aceb-241e9fbef489","html_url":"https://github.com/SeldomQA/poium","commit_stats":{"total_commits":339,"total_committers":5,"mean_commits":67.8,"dds":0.528023598820059,"last_synced_commit":"82b28908b3b5ada08de863ef97bf805c97924665"},"previous_names":["defnngj/selenium-page-objects"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeldomQA%2Fpoium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeldomQA%2Fpoium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeldomQA%2Fpoium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeldomQA%2Fpoium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SeldomQA","download_url":"https://codeload.github.com/SeldomQA/poium/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254219374,"owners_count":22034397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appium","pageobjects","playwright","python","selenium"],"created_at":"2024-09-24T13:58:24.655Z","updated_at":"2025-10-24T00:28:24.928Z","avatar_url":"https://github.com/SeldomQA.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](logo.png)\n\n[![PyPI version](https://badge.fury.io/py/poium.svg)](https://badge.fury.io/py/poium) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/poium)\n\n\u003e Page Objects design pattern test library; support selenium、appium、playwright, etc\n\nPage Objects 设计模式测试库；支持 selenium、appium、playwright 等。\n\n## Features\n\n* 极简的Page层的元素定义。\n* 支持主流的 Web/App UI库。\n* 对原生 API 无损。\n\n__支持库：__\n\n- [x] selenium ✔️\n- [x] appium ✔️\n- [x] playwright ✔️\n- [x] uiautomator2 ✔️\n- [x] facebook-wda ️ ✔️\n\n## Installation\n\npip install:\n\n```shell\n\u003e pip install poium\n\u003e pip install playwright [optional]\n\u003e pip install uiautomator2 [optional]\n\u003e pip install facebook-wda [optional]\n```\n\nIf you want to keep up with the latest version, you can install with GitHub repository url:\n\n```shell\n\u003e pip install -U git+https://github.com/SeldomQA/poium.git@master\n```\n\n## Sample\n\n### selenium/appium\n\n`poium` 对 `selenium/appium` 提供了良好的支持。\n\n👉 [详细文档](./tests/selenium_sample)\n\n* selenium\n\n```python\nfrom selenium import webdriver\nfrom poium import Page, Element, Elements\n\n\n# page\nclass BaiduPage(Page):\n    input = Element(\"#kw\")\n    button = Element(\"id=su\")\n    result = Elements(\"//div/h3/a\", describe=\"搜索结果\", timeout=2)\n\n\n# selenium\ndriver = webdriver.Chrome()\n\npage = BaiduPage(driver)\npage.open(\"https://www.baidu.com\")\npage.input.send_keys(\"baidu\")\npage.button.click()\n\nfor r in page.result:\n    print(r.text)\n\ndriver.close()\n```\n\n* appium\n\n```python\nfrom appium import webdriver\nfrom appium.options.android import UiAutomator2Options\nfrom poium import Page, Element\n\n\n# page\nclass CalculatorPage(Page):\n    number_1 = Element(\"id=com.android.calculator2:id/digit_1\")\n    number_2 = Element(\"id=com.android.calculator2:id/digit_2\")\n    add = Element(\"id=com.android.calculator2:id/op_add\")\n    eq = Element(\"id=com.android.calculator2:id/eq\")\n\n\n# appium\ncapabilities = {\n    \"automationName\": \"UiAutomator2\",\n    \"platformName\": \"Android\",\n    'appPackage': 'com.android.calculator2',\n    'appActivity': '.Calculator'\n}\noptions = UiAutomator2Options().load_capabilities(capabilities)\ndriver = webdriver.Remote('http://localhost:4723/wd/hub', options=options)\n\npage = CalculatorPage(driver)\npage.number_1.click()\npage.add.click()\npage.number_2.click()\npage.eq.click()\n\ndriver.quit()\n```\n\n### playwright\n\n`poium 1.2` 版本支持playwright库, 目前仅支持`sync`的用法.\n\n👉 [详细文档](./tests/playwright_sample)\n\n```python\nimport re\nfrom playwright.sync_api import sync_playwright\nfrom playwright.sync_api import expect\nfrom poium.playwright import Page, Locator\n\n\n# page\nclass BingPage(Page):\n    search_input = Locator('id=sb_form_q', describe=\"bing搜索框\")\n    search_icon = Locator('id=search_icon', describe=\"bing搜索按钮\")\n\n\n# playwright\nwith sync_playwright() as p:\n    # 启动浏浏览器\n    browser = p.chromium.launch(headless=False)\n    # 创建新的页面\n    page = browser.new_page()\n    # 进入指定URL\n    page.goto(\"https://cn.bing.com\")\n\n    # 获得元素\n    search_page = BingPage(page)\n    search_page.search_input.highlight()\n    search_page.search_input.fill(\"playwright\")\n    search_page.search_icon.highlight()\n    search_page.search_icon.screenshot(path=\"./docs/abc.png\")\n    search_page.search_icon.click()\n\n    # 断言URL\n    expect(page).to_have_title(re.compile(\"playwright\"))\n\n    # 关闭浏览器\n    browser.close()\n```\n\n### openatx\n\n`openatx` 有国内是非常流行的移动App自动化工具，`poium`同样对它做了支持。\n\n👉 [详细文档](./tests/u2_sample)\n\n* uiautomator2\n\n```python\nimport uiautomator2 as u2\n\nfrom poium.u2 import Page, XpathElement\n\n\nclass BingPage(Page):\n    search = XpathElement('//*[@resource-id=\"com.microsoft.bing:id/sa_hp_header_search_box\"]')\n    search_input = XpathElement('//*[@resource-id=\"com.microsoft.bing:id/sapphire_search_header_input\"]')\n    search_count = XpathElement('//*[@resource-id=\"count\"]')\n\n\nd = u2.connect()\nd.app_start(\"com.microsoft.bing\")\npage = BingPage(d)\npage.search.click()\n\npage.search_input.click()\npage.search_input.set_text(\"uiautomator2\")\npage.press(\"enter\")\npage.sleep(2)\nresult = page.search_count.get_text()\nassert \"个结果\" in result\n\nd.app_stop(\"com.microsoft.bing\")\n```\n\n### seldom\n\nseldom是一个全功能自动化测试框架。\n\n👉 [详细文档](./tests/seldom_sample)\n\n```python\nimport seldom\nfrom poium import Page, Element\n\n\nclass BaiduPage(Page):\n    \"\"\"baidu page\"\"\"\n    input = Element(\"id=kw\", describe=\"搜索输入框\")\n    button = Element(\"id=su\", describe=\"搜索按钮\")\n\n\nclass BaiduTest(seldom.TestCase):\n    \"\"\"Baidu search test case\"\"\"\n\n    def test_case(self):\n        \"\"\"A simple test\"\"\"\n        page = BaiduPage()\n        page.open(\"https://www.baidu.com\")\n        page.input.send_keys(\"seldom\")\n        page.button.click()\n        self.assertTitle(\"seldom_百度搜索\")\n\n\nif __name__ == '__main__':\n    seldom.main(browser='edge')\n```\n\n## 微信（WeChat）\n\n\u003e 欢迎添加微信，交流和反馈问题。\n\n\u003cdiv style=\"display: flex;justify-content: space-between;width: 100%\"\u003e\n    \u003cp\u003e\u003cimg alt=\"微信\" src=\"wechat.jpg\" style=\"width: 200px;height: 100%\" \u003e\u003c/p\u003e\n\u003c/div\u003e\n\n## Star History\n\n![Star History Chart](https://api.star-history.com/svg?repos=SeldomQA/poium\u0026type=Date)\n\n## Project History\n\n* [page-objects](https://github.com/eeaston/page-objects)\n\npoium 参考 page-objects，他项目已经不再维护，原项目代码虽然只有100多行，但设计非常精妙。本项目在此基础上进行开发。\n\n* [selenium-page-objects](https://pypi.org/project/selenium-page-objects/)\n\nselenium-page-objects是poium的前身，为了简化项目名称，改名为poium。__po__ 取自 Page Object 首字母, __ium__\n取自selenium/appium 共同后缀。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseldomqa%2Fpoium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseldomqa%2Fpoium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseldomqa%2Fpoium/lists"}