使用selenium + pytest + allure做WBE UI自动化
生活随笔
收集整理的這篇文章主要介紹了
使用selenium + pytest + allure做WBE UI自动化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄結構
依然使用了常見的po 模式
- 目錄結構
- config
- config.ini 修改目標路由與相關配置
- elements
- 抽象頁面空間元素
- method
- 抽象頁面方法
- TestCase
- 測試用例
- utils
- Assert 自定義斷言
- chromedriver 瀏覽器驅動 需匹配版本 非linux 環境無視
- Driver 初始化driver
- graphical 圖片相對定位
- log 日志
- seleniumBase api封裝
- seleniumOpt opt定義
- config
初始化Driver
根據判斷運行環境 選擇不同的chrome driver 或者使用 ChromeDriverManager 自動下載
class Driver:@classmethoddef driver(cls):try:# select local or docker# if platform == "Darwin":# url = Config().get_conf("dockerHub", "url")# driver = webdriver.Remote(url, desired_capabilities=capabilities(),# options=options())# # else:if platform.system() == "Linux":executable_path = os.path.join(os.path.dirname(__file__), "chromedriver")driver = webdriver.Chrome(executable_path=executable_path, options=options())else:executable_path = ChromeDriverManager().install()driver = webdriver.Chrome(executable_path=executable_path, options=options())driver.implicitly_wait(20)log.info(f"driver:{driver.name}")return driverexcept BaseException as e:log.error(e)raise e自定義driver 的options 配置
def options():"""瀏覽器設置:return:"""_options = ChromeOptions()# # 設置chrome為手機界面# mobileEmulation = Config().get_conf("seleniumOpt", "mobileEmulation")# if mobileEmulation == 'true':# mobile_emulation = {"deviceName": "Galaxy S5"}# _options.add_experimental_option("mobileEmulation", mobile_emulation)if platform.system() == 'Darwin':passelse:_options.add_argument('--headless')_options.add_argument('--no-sandbox')_options.add_argument('--disable-gpu')_options.add_argument('--disable-dev-shm-usage')return _optionsBase類
封裝常用API 把driver 實例化傳入
查找元素盡量使用顯示等待 expected_conditions
使用了Faker 可隨意生成測試數據
查找元素失敗 使用allure 上傳截圖
自定Assert
很常規 沒什么可說的
class Assert:@staticmethoddef assert_unequal(exp, res):try:log.info("ASSERT UNEQUAL: EXPECT IS [{}] RESULT IS [{}]".format(exp, res))assert exp != resreturn Trueexcept AssertionError as e:log.error("ASSERT UNEQUAL ERROR: EXPECT IS [{}] RESULT IS [{}]".format(exp, res))raise e關于頁面元素
根據op 依舊對頁面抽象成類 并繼承SeleniumBaseConfig
元素類1一對1配套
對應元素類
class Register:# ================== 公共 ================# 下一步NEXT_STEP_BUTTON = ("xpath", "//button")# 返回RETURN = ('xpath', '//p[@class="return-prev-step"]')# input 錯誤信息INPUT_ERROR_INFO = ("xpath", '//p[@class="default-input-error"]')# ================== home界面 ================CREATE_BUTTON = ("xpath", "//div[text()='創建']") # 創建buttonJOIN_BUTTON = ("xpath", "//div[text()='加入']") # 創建buttonINPUT_TEAM_NAME = ("xpath", '//input[@placeholder="請輸入團隊名稱"]') # 輸入團隊名稱INPUT_YOUR_NAME = ("xpath", '//input[@placeholder="請輸入你的姓名"]') # 輸入個人名稱測試用例
@pytest.mark.P3@allure.title("創建新團隊:姓名輸入漢字、英文、數字字符")@pytest.mark.flaky(reruns=1, reruns_delay=2)def test_create_team_username(self):"""姓名輸入漢字、英文、數字字符1.register2.create team3.create_team_username"""pics = []self.driver.register(self.mobile)exp = "true"res = self.driver.check_button_disabled()self.driver.allure_report(self.test_create_team_username, pics, exp, res)self.driver.Assert.assert_equal(exp, res)Config 配置
一般配置host 等數據 使用ConfigParser讀取寫入
config.ini
main 啟動
使用sys.argv 獲取命令行自定義參數
if len(sys.argv) > 3:runCase = sys.argv[1] # P1 P2 P3 ALL 指定運行的用例等級if runCase != "ALL":case_path = f"-m={runCase}"xml = sys.argv[2] # 報告路徑if xml:xml_report_path = xmlBUILD_NUMBER = sys.argv[3]args = ["-s", "-v", "-n=auto", case_path, '--alluredir', xml_report_path, '--clean-alluredir']pytest.main(args=args)圖片相對定位 獲得坐標
場景
canvas 頁面 無元素可定位
使用
先截取想要點擊的位置圖片 保存到本地
find_me 傳入driver 對象
通過 center_x 與center_y 屬性方法 獲得相對坐標
pytest
pytest 有很多好用的功能、比如失敗重跑、多進程并行用例、fixture 測試
用例參數化等等
詳見 gitHUB-SeleniumUIAuto 中的 readme
總結
以上是生活随笔為你收集整理的使用selenium + pytest + allure做WBE UI自动化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle临时表空间地址,Oracle
- 下一篇: java代码实现压缩文件.gz格式,解压