封装POM

Web,APP端都有不同的页面
创建 pom 包 专门存放不同的页面,对页面进行管理。

创建pom的基类 basepage

pom/basepage.py

  1. """
  2. 所有页面的基类
  3. """
  4. from appium.webdriver.webdriver import WebDriver
  5. class BasePage:
  6. def __init__(self,driver:WebDriver):
  7. self.driver = driver
  8. @property
  9. def toast_text(self):
  10. toast = self.driver.find_element_by_xpath('//android.widget.Toast')
  11. return toast.text

分别根据app页面和web页面的不同封装不同的页面对象

Web 页面的模型

pom/webpage/mainpage.py

  1. """
  2. Web 页面的主页
  3. """
  4. from pom.basepage import BasePage
  5. from pom.webpage.loginpage import LoginPage
  6. from pom.webpage.settingpage import SettingPage
  7. class MainPage(BasePage):
  8. def go_to_mainpage(self):
  9. self.driver.get('http://47.100.175.62:3000/')
  10. return self
  11. def go_to_login_page(self):
  12. """
  13. 打开登录页面
  14. :return:
  15. """
  16. self.driver.find_element_by_xpath('//a[@href="/signin"]').click()
  17. return LoginPage(self.driver)
  18. def go_to_setting_page(self):
  19. """
  20. 到达设置页面
  21. :return:
  22. """
  23. self.driver.find_element_by_xpath('//a[@href="/setting"]').click()
  24. return SettingPage(self.driver)

pom/webpage/loginpage.py

  1. """
  2. 登录页面
  3. """
  4. from pom.basepage import BasePage
  5. class LoginPage(BasePage):
  6. def login_with_username_passwd(self,username,passwd):
  7. self.driver.find_element_by_id('name').send_keys(username)
  8. self.driver.find_element_by_id('pass').send_keys(passwd)
  9. self.driver.find_element_by_xpath('//*[@type="submit"]').click()

pom/webpage/settingpage.py

  1. """
  2. 设置页面
  3. """
  4. from pom.basepage import BasePage
  5. class SettingPage(BasePage):
  6. @property
  7. def accesstoken(self):
  8. """
  9. 获取token
  10. :return:
  11. """
  12. return self.driver.find_element_by_id('accessToken').text

app的页面模型

pom/apppage/mainpage.py

  1. """
  2. 手机app的主页
  3. """
  4. import time
  5. from pom.apppage.loginpage import LoginPage
  6. from pom.basepage import BasePage
  7. class MainPage(BasePage):
  8. def go_to_login_page(self):
  9. """到达登录
  10. """
  11. self.driver.find_element_by_xpath(
  12. '//*[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton').click()
  13. time.sleep(1)
  14. self.driver.find_element_by_id('org.cnodejs.android.md:id/tv_login_name').click()
  15. return LoginPage(self.driver)

pom/apppage/loginpage.py

  1. """
  2. 手机的登录页面
  3. """
  4. from pom.basepage import BasePage
  5. class LoginPage(BasePage):
  6. def login_with_accesstoken(self,token):
  7. self.driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token').send_keys(token)
  8. self.driver.find_element_by_id('org.cnodejs.android.md:id/btn_login').click()
  9. return self

创建测试用例

testcases/test_login.py

  1. import time
  2. from pom.apppage.mainpage import MainPage as AMP
  3. from pom.webpage.mainpage import MainPage as WMP
  4. def test_web_app_login(wdriver,adriver):
  5. # 从首页登录
  6. WMP(wdriver).go_to_mainpage()\
  7. .go_to_login_page()\
  8. .login_with_username_passwd('fanmao_36','123456')
  9. # 登录成功之后进入到设置页面获取token值
  10. token = WMP(wdriver).go_to_setting_page().accesstoken
  11. loginpage = AMP(adriver)\
  12. .go_to_login_page()\
  13. .login_with_accesstoken(token)
  14. assert loginpage.toast_text == "登录成功"

执行测试用例