def test_login_s(self, user_phone, password, is_true): """判断登录成功方法""" logging.info('输入账号:{},输入密码:{}'.format(user_phone, password)) # 调用登录方法 PageFactory.get_n_login().login_operation(user_phone, password) # 判断登录是否成功 if is_true: try: # 查找用户名 Base().search_ele(PageElements.user_name) except: print('\n登录失败') # 添加截图 allure.attach(Base.driver.get_screenshot_as_png(), "截图", allure.attachment_type.PNG) assert False else: print('\n登录成功') assert True self.dc() else: # 判断登录是否成功 try: # 查找用户名 Base().search_ele(PageElements.user_name) except: print('\n登录失败') PageFactory.get_n_login().click_close_login() assert True else: print('\n登录成功') # 添加截图 allure.attach(Base.driver.get_screenshot_as_png(), "截图", allure.attachment_type.PNG) assert False
class LoginPage: def __init__(self, driver): self.driver = driver self.base_obj = Base(self.driver) def login_input(self, text): self.base_obj.ele_input(page.s_1, text)
def setup_class(self): """声明driver""" # server 启动参数 desired_caps = { 'platformName': 'Android', 'platformVersion': '5.1', 'deviceName': 'sanxing', 'appPackage': 'com.android.settings', 'appActivity': '.Settings' } # 声明我们的driver对象 self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 实例化Base类 self.base_obj = Base() # 页面元素 # 搜索按钮 self.search_btn_id = (By.ID, "com.android.settings:id/search") # 搜索输入框 self.search_input_id = (By.ID, "android:id/search_src_text") # 搜索结果 self.search_result_ids = (By.ID, "com.android.settings:id/title")
class SearchPage: def __init__(self, driver): # 实例化Base类 self.base_obj = Base(driver) """页面元素""" # 搜索按钮 self.search_btn = (By.ID, "com.android.settings:id/search") # 输入框 self.search_input = (By.ID, "android:id/search_src_text") # 搜索结果 self.search_result = (By.ID, "com.android.settings:id/title") def click_search_btn(self): """点击搜索按钮""" self.base_obj.click_ele(self.search_btn) def send_search_text(self, text): """ 输入搜索内容 :param text: 需要输入的搜索内容 :return: """ self.base_obj.send_ele(self.search_input, text) def get_search_result(self): """获取搜索结果""" # 返回定位对象列表目的??[对象1, 对象2.....] -> [对象1文本,对象2文本....] results = self.base_obj.search_eles(self.search_result) return [i.text for i in results]
class PageWeibo: def __init__(self, driver): self.driver = driver self.base_obj = Base(self.driver) def weibo_login(self,text): self.base_obj.ele_input(page.w_1,text)
class Page_1: def __init__(self, driver): self.driver = driver self.obj = Base(self.driver) def search_click(self): self.obj.ele_click(page.s_1) def search_input(self, text): self.obj.ele_input(page.s_2, text)
def __init__(self, driver): # 实例化Base类 self.base_obj = Base(driver) """页面元素""" # 搜索按钮 self.search_btn = (By.ID, "com.android.settings:id/search") # 输入框 self.search_input = (By.ID, "android:id/search_src_text") # 搜索结果 self.search_result = (By.ID, "com.android.settings:id/title")
class Test_Search: def setup_class(self): """声明driver""" # server 启动参数 desired_caps = { 'platformName': 'Android', 'platformVersion': '5.1', 'deviceName': 'sanxing', 'appPackage': 'com.android.settings', 'appActivity': '.Settings' } # 声明我们的driver对象 self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 实例化Base类 self.base_obj = Base(self.driver) # 页面元素 # 搜索按钮 self.search_btn_id = (By.ID, "com.android.settings:id/search") # 搜索输入框 self.search_input_id = (By.ID, "android:id/search_src_text") # 搜索结果 self.search_result_ids = (By.ID, "com.android.settings:id/title") def teardown_class(self): """退出driver""" self.driver.quit() # 因为只需要运行一次 并且是依赖方法,所以使用fixture工厂函数 @pytest.fixture(scope="class", autouse=True) def click_search_btn(self): """点击搜索按钮 并且 点击一次""" self.base_obj.click_ele(self.search_btn_id) @pytest.mark.parametrize("search_data, exp_data", [("1", "休眠"), ("i", "IP地址"), ("m", "MAC地址")]) def test_search_text(self, search_data, exp_data): """ 搜索测试方法 :param search_data: 输入内容 :param exp_data: 预期结果 :return: """ # 输入框输入内容 self.base_obj.send_ele(self.search_input_id, search_data) # 获取结果 results = self.base_obj.search_eles(self.search_result_ids) # 断言 assert exp_data in [i.text for i in results]
def test_login_success(self): try: driver = self.driver self.login_attempt(self.df.loc[0, "mobile_email"], self.df.loc[0, "password"]) home = HomePage(driver) # Homepage object name = self.df.loc[0, "firstname"] + " " + self.df.loc[0, "lastname"] Base.take_screenshot(self) assert home.get_bookmark_icon_text() == name except Exception as e: # Allure screenshot for the test allure.attach(driver.get_screenshot_as_png(), name='screenshot', attachment_type=allure.attachment_type.PNG) raise print("Title is wrong", format(e))
def close_update_btn(self): """关闭更新提示""" logging.info("判断,关闭更新提示") try: # 查找“更新提示” Base().search_ele(PageElements.close_update) except: pass else: # 点击“x” self.click_close_update()
def setup_class(self): """判断登录退出方法""" try: # 查找“更新提示” Base().search_ele(PageElements.close_update) except: pass else: # 点击“x” PageFactory.get_home().click_close_update() finally: # 点击“我” PageFactory.get_home().click_user_navigation()
class Register(): def __init__(self, driver): self.base = Base(driver) self.read_config = ReadConfig( r'F:\xw\example\web_projrct\Config\el.ini', 'Register') self.getcode = GetCode(driver) #注册 def register(self, email, user, password): register_email = self.read_config.get_value('register_email') register_name = self.read_config.get_value('register_name') register_password = self.read_config.get_value('register_password') register_input_code = self.read_config.get_value('register_input_code') register_get_code = self.read_config.get_value('register_get_code') register_btn = self.read_config.get_value('register_btn') self.base.element_input(register_email, email) self.base.element_input(register_name, user) self.base.element_input(register_password, password) code = self.getcode.get_code(register_get_code) self.base.element_input(register_input_code, code) self.base.element_click(register_btn)
def setUpClass(cls): cls.log=Log() cls.driver=InitDriver() cls.base=Base(cls.driver) cls.register=Register(cls.driver) read_config=ReadConfig(r'F:\xw\example\web_projrct\Config\platform.ini','URL') reigster_url=read_config.get_value('register_url') try: cls.log.info('开始注册测试') cls.log.info('开始打开注册网页') cls.driver.get(reigster_url) cls.driver.implicitly_wait(30) cls.log.info('打开注册网页成功') except Exception as e: cls.log.info('打开注册网页失败') raise e
def dc(self): """判断登出方法""" # 点击设置 PageFactory.get_y_login().click_setting_btn() # 调用登出操作 PageFactory.get_setting().log_out_operation() # 点击“我” PageFactory.get_home().click_user_navigation() # 判断登出是否成功 try: # 查找“已有账号,去登录” Base().search_ele(PageElements.go_to_login) except: print('\n登出失败') else: print('\n登出成功')
def test_login(self, user_phone, password): """判断登录成功方法""" # 点击“去登录” PageFactory.get_go_to_login().click_go_to_login() # 调用登录方法 PageFactory.get_n_login().login_operation(user_phone, password) # 判断登录是否成功 try: # 查找用户名 Base().search_ele(PageElements.user_name) except: print('\n登录失败') assert False else: print('\n登录成功') assert True self.dc()
def test_login(self, user_phone, password): """判断登录成功方法""" # 输入手机号 PageFactory.get_n_login().send_phone(user_phone) # 输入密码 PageFactory.get_n_login().send_password(password) # 点击登录 PageFactory.get_n_login().click_login_btn() # 判断登录是否成功 try: # 查找用户名 Base().search_ele(PageElements.user_name) except: print('\n登录失败') assert True else: print('\n登录成功') assert False
class Login(): def __init__(self, driver): self.read_config = ReadConfig( r'F:\xw\example\web_projrct\Config\el.ini', 'Login') self.base = Base(driver) def login(self, name, password): login_name = self.read_config.get_value('login_name') login_password = self.read_config.get_value('login_password') login_btn = self.read_config.get_value('login_btn') self.base.element_input(login_name, name) self.base.element_input(login_password, password) self.base.element_click(login_btn)
class GetCode(): def __init__(self,driver,filename=None): self.driver=driver if filename: self.filename=filename else: self.filename=r'F:\xw\example\web_projrct\Config\code.png' #获取验证码元素 def get_code_el(self,loc): self.base = Base(self.driver) el=self.base.find_element(loc) return el #获取验证码并保存在filename中 def get_code_image(self,loc): self.driver.save_screenshot(self.filename) #验证码尺寸 size=self.get_code_el(loc).size width=size['width'] height=size['height'] #验证码坐标 location=self.get_code_el(loc).location left=location['x'] top=location['y'] right=left+width bottom=top+height im=Image.open(self.filename) #按坐标裁剪,图形内只剩验证码 im=im.crop((left,top,right,bottom)) im.save(self.filename) return self.filename #解析验证码 def get_code(self,loc): filename=self.get_code_image(loc) image=Image.open(filename) #验证码的图片模式为RGBA,是无法分配调色盘给透明通道的。更换为RGB模式 image = image.convert('RGB') text=pytesseract.image_to_string(image) return text
def __init__(self, driver): Base.__init__(self, driver)
def __init__(self): Base.__init__(self, 'mp')
def __init__(self): self.browser = Base.browser()
def __init__(self): # 实例化Base类 Base.__init__(self)
def __init__(self, driver): self.base = Base(driver) self.read_config = ReadConfig( r'F:\xw\example\web_projrct\Config\el.ini', 'Register') self.getcode = GetCode(driver)
def setUp(self): Base.browser().get(config_url()) Base.browser().maximize_window() Base.browser().implicitly_wait(10) self.searchPage = SearchPage()
def __init__(self, driver): self.driver = driver self.base_obj = Base(self.driver)
def __init__(self, driver): Base.__init__(self, driver) self.page_elements = PageElements()
def __init__(self): Base.__init__(self, 'app')
def get_code_el(self,loc): self.base = Base(self.driver) el=self.base.find_element(loc) return el
def __init__(self): Base.__init__(self, 'mis')
def tearDown(self): Base.browser().quit()