ui自動化框架
阿新 • • 發佈:2020-12-29
技術標籤:ui自動化
from selenium import webdriver from time import sleep from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def get_driver(drivername="chrome"): if drivername == "chrome": # user_data_dir = r"--user-data-dir=C:\Users\01397622\AppData\Local\Google\Chrome\User Data" # options = webdriver.ChromeOptions() # options.add_argument(user_data_dir) # driver = webdriver.Chrome(options=options) driver = webdriver.Chrome() elif drivername == "firefox": driver = webdriver.Firefox() elif drivername == "ie": driver = webdriver.Ie() else: driver = None return driver class Base: def __init__(self, driver): self.driver = driver def get_url(self, url): self.driver.get(url) self.driver.maximize_window() sleep(2) def close(self): sleep(2) self.driver.quit() def refresh(self): self.driver.refresh() def back(self): self.driver.back() def forward(self): self.driver.forward() def get_element(self, locator, timeout=20): try: element = WebDriverWait(self.driver, timeout).until(EC.presence_of_element_located(locator)) except Exception as e: print(e) element = None return element def get_elements(self, locator, timeout=10): try: elements = WebDriverWait(self.driver, timeout).until(EC.presence_of_all_elements_located(locator)) except Exception as e: print(e) elements = None return elements def is_text_in_element(self, locator, text, timeout=20): try: if WebDriverWait(self.driver, timeout).until(EC.text_to_be_present_in_element(locator, text)): return True else: return False except Exception as e: print(e) return False def is_value_in_element(self, locator, value, timeout=10): try: if WebDriverWait(self.driver, timeout).until(EC.text_to_be_present_in_element_value(locator, value)): return True else: return False except Exception as e: print(e) return False def click(self, locator): try: self.get_element(locator).click() sleep(3) except Exception as e: print(e) def clear(self, locator): try: self.get_element(locator).clear() except Exception as e: print(e) def send_keys(self, locator, text): try: self.clear(locator) self.get_element(locator).send_keys(text) sleep(2) except Exception as e: print(e) def click_checkBox(self, locator): try: element = self.get_element(locator) if element.is_selected(): pass else: self.click(locator) except Exception as e: print(e) def quit(self): self.driver.quit() if __name__ == '__main__': driver = get_driver("chrome") base = Base(driver) base.get_url(r"C:\Users\01397622\PycharmProjects\Selenium-study\練習頁面\註冊A.html") # r轉義 userA_loc = ("id", "userA") telA_loc = ("id", "telA") apple_loc = ("id", "pga") base.send_keys(userA_loc, "lm") base.send_keys(telA_loc, "110") base.click_checkBox(apple_loc) base.close()
from common.base import Base from common.base import get_driver page_url = "https://www.baidu.com/" class Page(Base): login_loc = ("link text", "登入") usernamelogin_loc = ("css selector", "#TANGRAM__PSP_11__footerULoginBtn") username_loc = ("name", "userName") password_loc = ("name", "password") submit_loc = ("id", "TANGRAM__PSP_11__submit") success_username_loc = ("css selector", "#s-top-username > span.user-name.c-font-normal.c-color-t") def get(self): self.get_url(page_url) def click_login(self): self.click(self.login_loc) def click_usernamelogin(self): self.click(self.usernamelogin_loc) def input_username(self, text): self.send_keys(self.username_loc, text) def input_password(self, text): self.send_keys(self.password_loc, text) def click_submit(self): self.click(self.submit_loc) def judge_success(self, name): if self.is_text_in_element(self.success_username_loc, name): return True else: return False if __name__ == '__main__': driver = get_driver("chrome") p = Page(driver) p.get() p.click_login() p.click_usernamelogin() p.input_username("13065175265") p.input_password("lm18379695606") p.click_submit() p.judge_success()
from common.base import get_driver from page.page import Page import unittest import ddt data = [{"username": "13065175265", "password": "lm18379695606","judgename":"妮可Alex", "expect": True}, {"username": "18866665555", "password": "lm18379695606", "judgename":"妮可Bob","expect": False} ] """ ddt資料驅動 測試資料單獨操作 """ # data的這部分測試資料可以放一個excel表格中儲存,python的xlrd庫可以操作 # @ddt.ddt class Test_login(unittest.TestCase): def setUp(self): self.driver = get_driver() self.p = Page(self.driver) self.p.get() def tearDown(self): self.p.close() @ddt.data(*data) def test_login(self, data): """百度登入引數化""" self.p.click_login() self.p.click_usernamelogin() self.p.input_username(data['username']) self.p.input_password(data['password']) self.p.click_submit() result = self.p.judge_success(data['judgename']) self.assertEqual(data['expect'], result, msg="預期不一致,登入失敗") if __name__ == '__main__': unittest.main(verbosity=2) """ 引數化 斷言 操作 unittest 中自己寫引數化還是挺麻煩的,跟 pytest 的 pytest.mark.parametrize 比差太多。 有兩個輔助的庫,專門解決 unittest 的引數化問題:ddt 和 parameterized。 """
"""
pip install BeautifulReport -i https://pypi.tuna.tsinghua.edu.cn/simple/
必須是run**.py檔案
"""
import unittest #單元測試模組
from script.script import Test_login
from BeautifulReport import BeautifulReport #匯入BeautifulReport模組,這個模組也是生成報告的模組,但是比HTMLTestRunner模板好看
suite = unittest.TestSuite() # 定義一個測試集合
suite.addTest(unittest.makeSuite(Test_login)) # 把寫的用例加進來(將Test_login類)加進來
run = BeautifulReport(suite) # 例項化BeautifulReport模組
run.report(filename='report',description='百度登入自動化報告',report_dir='report') # (報告名稱 , 報告描述) :必填項
# 報告存放路徑:report目錄與run_case.py檔案同級 , 故不能../report,直接report
# report和/report 是不同的地址
"""
F. # 一個成功,一個失敗
測試已全部完成, 可開啟 C:\\Users\01397622\PycharmProjects\Selenium-study\SF-tech\report.html 檢視報告
"""