封装POM
Web,APP端都有不同的页面
创建 pom 包 专门存放不同的页面,对页面进行管理。
创建pom的基类 basepage
pom/basepage.py
"""
所有页面的基类
"""
from appium.webdriver.webdriver import WebDriver
class BasePage:
def __init__(self,driver:WebDriver):
self.driver = driver
@property
def toast_text(self):
toast = self.driver.find_element_by_xpath('//android.widget.Toast')
return toast.text
Web 页面的模型
pom/webpage/mainpage.py
"""
Web 页面的主页
"""
from pom.basepage import BasePage
from pom.webpage.loginpage import LoginPage
from pom.webpage.settingpage import SettingPage
class MainPage(BasePage):
def go_to_mainpage(self):
self.driver.get('http://47.100.175.62:3000/')
return self
def go_to_login_page(self):
"""
打开登录页面
:return:
"""
self.driver.find_element_by_xpath('//a[@href="/signin"]').click()
return LoginPage(self.driver)
def go_to_setting_page(self):
"""
到达设置页面
:return:
"""
self.driver.find_element_by_xpath('//a[@href="/setting"]').click()
return SettingPage(self.driver)
pom/webpage/loginpage.py
"""
登录页面
"""
from pom.basepage import BasePage
class LoginPage(BasePage):
def login_with_username_passwd(self,username,passwd):
self.driver.find_element_by_id('name').send_keys(username)
self.driver.find_element_by_id('pass').send_keys(passwd)
self.driver.find_element_by_xpath('//*[@type="submit"]').click()
pom/webpage/settingpage.py
"""
设置页面
"""
from pom.basepage import BasePage
class SettingPage(BasePage):
@property
def accesstoken(self):
"""
获取token
:return:
"""
return self.driver.find_element_by_id('accessToken').text
app的页面模型
pom/apppage/mainpage.py
"""
手机app的主页
"""
import time
from pom.apppage.loginpage import LoginPage
from pom.basepage import BasePage
class MainPage(BasePage):
def go_to_login_page(self):
"""到达登录
"""
self.driver.find_element_by_xpath(
'//*[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton').click()
time.sleep(1)
self.driver.find_element_by_id('org.cnodejs.android.md:id/tv_login_name').click()
return LoginPage(self.driver)
pom/apppage/loginpage.py
"""
手机的登录页面
"""
from pom.basepage import BasePage
class LoginPage(BasePage):
def login_with_accesstoken(self,token):
self.driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token').send_keys(token)
self.driver.find_element_by_id('org.cnodejs.android.md:id/btn_login').click()
return self
创建测试用例
testcases/test_login.py
import time
from pom.apppage.mainpage import MainPage as AMP
from pom.webpage.mainpage import MainPage as WMP
def test_web_app_login(wdriver,adriver):
# 从首页登录
WMP(wdriver).go_to_mainpage()\
.go_to_login_page()\
.login_with_username_passwd('fanmao_36','123456')
# 登录成功之后进入到设置页面获取token值
token = WMP(wdriver).go_to_setting_page().accesstoken
loginpage = AMP(adriver)\
.go_to_login_page()\
.login_with_accesstoken(token)
assert loginpage.toast_text == "登录成功"
执行测试用例