python2.7基於selenium的web自動化測試專案--house目錄
#ResidentiaPage.py
###樓盤模組
# -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by import By from base import SQL from base.Base import log from base.Base import consoleLog class ResidentialPage(Base): addResidentialMould = { 'search_btn': (By.ID, 'search_btn'), # 列表頁載入的等待元素--搜尋 # 樓盤地址 'add_btn' : (By.ID, 'add_btn'), # 新增樓盤 'residential_name': (By.CSS_SELECTOR,'#residential_name + span > input'), #樓盤名稱 'residential_jianpin': (By.CSS_SELECTOR,'#residential_jianpin + span > input '), #樓盤簡拼 'byname_btn': (By.ID, 'other_contact_btn'), #樓盤別名新增按鈕 'byname': (By.CSS_SELECTOR, '#byname + span > input'), #樓盤別名 'save_button_btn': (By.ID, 'contact_form_btn'), # 儲存 'address': (By.CSS_SELECTOR, '#address + span > input:nth-child(1)'),#街道地址 'get_location_btn': (By.ID, 'get_btn'), #獲取經緯度 'search_address': (By.ID, 'tipinput'), #輸入關鍵字'map_point' : (By.CLASS_NAME,'amap_lib_placeSearch_poi'), 'search_map_btn': (By.ID, 'searchMap'), # 點選查詢 'save_location_btn': (By.ID, 'add_geo_btn'),#儲存經緯度 # 基礎資訊 'department' : 'body > div:nth-child(23) > div > ul > li > ul > li:nth-child(2) > ul > li:nth-child(1) > ul > li:nth-child(1) > ul > li:nth-child(1) > div > span:nth-child(7)',#責任部門 'build_date': (By.CSS_SELECTOR, '#build_date + span > input'), # 建築年代 'totle_buildings' : (By.CSS_SELECTOR,'#totle_buildings + span > input'),#總棟數 'total_unit_count': (By.CSS_SELECTOR, '#total_unit_count + span > input'), #總單元數 'total_house_count': (By.CSS_SELECTOR, '#total_house_count + span > input'), #總戶數 'build_area': (By.CSS_SELECTOR, '#build_area + span > input'), #佔地面積 'property_company': (By.ID, 'property_company'), #物業公司 'property_fee': (By.ID, 'property_fee'), #物業費 'plot_ratio': (By.CSS_SELECTOR, '#plot_ratio + span > input'), # 容積率 'green_rate': (By.CSS_SELECTOR, '#green_rate + span > input'), # 綠化率 'parking_amount': (By.CSS_SELECTOR, '#parking_amount + span > input'), # 車位數 'other_info': (By.ID, 'other_info'), # 樓盤亮點 # 周邊配套,圖片,儲存 'bus_stations': (By.ID, 'bus_stations'),#公交站 'metro_stations': (By.ID, 'metro_stations'), #地鐵站 'roomsFileUpload_btn': (By.CSS_SELECTOR,'#base_img > table > tbody > tr > td > a'),#圖片上傳 'submit_btn': (By.ID, 'form_btn'),#儲存 #棟座資訊 'building_info_btn' : (By.CSS_SELECTOR,'#residential + div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(17) > div > button:nth-child(2)'), #棟座資訊按鈕 'add_building_btn': (By.CSS_SELECTOR, '#ResidentialBuilding_table > div > a'), # 新增樓座 'building_name': (By.CSS_SELECTOR, '#residential_building_info > table > tbody > tr:nth-child(2) > td:nth-child(2) > input'),# 棟座名稱 'lng_lat_btn': (By.ID, 'get_btn'), # 經緯度 'input_searchMap': (By.CSS_SELECTOR, '#myPageTop > table > tbody > tr:nth-child(2) > td:nth-child(1) > input'),# 關鍵字輸入框 'searchMap_btn': (By.ID, 'searchMap'), # 查詢 'save_lng_lat_btn': (By.ID, 'add_geo_btn'), # 儲存 'ground_floors': '#ground_floors', # 地面層數 'underground_floors': '#underground_floors', # 地下層數 'ladder_count': '#ladder_count', # 梯數 'house_count': '#house_count', # 戶數 #單元資訊 'unit_info_btn': (By.CSS_SELECTOR, '#buliding + div > div:nth-child(2) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > table > tbody > tr:nth-child(1) > td:nth-child(11) > div > button:nth-child(1)'), # 單元資訊 'add_unit_btn ': (By.CSS_SELECTOR, '#ResidentialBuildingUnit_table > div > a'), # 新增 'unit_name': (By.ID, 'unit_name'), # 單元名稱 'save_unitname_btn': (By.ID, 'form_btn'), # 儲存 #樓層資訊 'floor_info_btn': (By.CSS_SELECTOR, '#buliding_unit + div > div:nth-child(2) > div > div:nth-child(2) > div:nth-child(2) > table > tbody > tr > td:nth-child(4) > div > button:nth-child(1)'),# 樓層資訊 'add_floor_btn': (By.CSS_SELECTOR, '#ResidentialBuildingFloor_table > div > a'), # 新增 'floor_name': (By.ID, 'floor_name'), # 樓層名稱 #房號資訊 'house_info_btn': (By.CSS_SELECTOR, '#buliding_floor + div > div > div > div> div > table > tbody > tr > td:nth-child(4) > div > button:nth-child(1)'),# 房號資訊 'add_house_btn': (By.CSS_SELECTOR, '#ResidentialBuildingHouseNo_table > div >a '), # 新增 'house_no': (By.ID, 'house_no') # 房號名稱 } typeMould = { 'area_code': '#area_code ', # 城區- 'business_circle_name': '#taBusinessCircleString ' ,# 商圈 'property_type': '#property_type ', # 物業型別 'property_use': '#housing_type', # 物業用途 'department_loc' : '#taDepartString' #責任部門 } @log def addResidential(self): """新增樓盤字典、 新增棟座,單元,樓層,房號""" self.open(Page.residentiaPage,self.addResidentialMould['search_btn'],havaFrame = False) # 樓盤地址 self.click(self.addResidentialMould['add_btn']) self.input_text(self.addResidentialMould['residential_name'], 'AutoTest') self.click(self.addResidentialMould['residential_jianpin']) self.click(self.addResidentialMould['byname_btn']) self.input_text(self.addResidentialMould['byname'], 'auto') self.click(self.addResidentialMould['save_button_btn']) self.type_select(self.typeMould['area_code'],"330102") #上城區 self.type_select(self.typeMould['business_circle_name'],"35") #四季青 self.input_text(self.addResidentialMould['address'], u'自動化測試街道地址') self.click(self.addResidentialMould['get_location_btn']) self.input_text(self.addResidentialMould['search_address'], u'海創基地', first=False) self.click(self.addResidentialMould['search_map_btn']) self.click(self.addResidentialMould['search_address']) self.click(self.addResidentialMould['map_point']) self.click(self.addResidentialMould['save_location_btn']) #基礎資訊 self.type_select(self.typeMould['property_type'],'ordinary' ) sql = "SELECT sd.parent_id from sys_department sd INNER JOIN sys_user sur on sur.dep_id = sd.dep_id INNER JOIN sys_position spt on spt.position_id = sur.position_id where sd.dep_district = '330100' and sd.dep_id <> '00000000000000000000000000000000' and (spt.position_name like '資產管家%' or spt.position_name like '綜合管家%') LIMIT 1" self.type_combotree(self.typeMould['department_loc'],SQL.serach(sql)) self.input_text(self.addResidentialMould['build_date'], 1988, first=False) self.input_text(self.addResidentialMould['totle_buildings'], 10, first=False) self.input_text(self.addResidentialMould['total_unit_count'], 30, first=False) self.input_text(self.addResidentialMould['total_house_count'], 20, first=False) self.input_text(self.addResidentialMould['build_area'], 400, first=False) self.input_text(self.addResidentialMould['property_company'], u'杭州物業有限公司', first=False) self.input_text(self.addResidentialMould['property_fee'], 2, first=False) self.input_text(self.addResidentialMould['plot_ratio'], 80, first=False) self.input_text(self.addResidentialMould['green_rate'],20,first=False) self.input_text(self.addResidentialMould['parking_amount'], 200, first=False) self.input_text(self.addResidentialMould['other_info'], u'臨近公交地鐵,附近有超市,環境優美', first=False) # 周邊配套,圖片 self.input_text(self.addResidentialMould['bus_stations'], u'六合橋', first=False) self.input_text(self.addResidentialMould['metro_stations'], u'濱江站', first=False) # 提交新增樓盤字典 self.click(self.addResidentialMould['submit_btn']) Base.succeed += 1 consoleLog('樓盤新增成功') # 棟座 self.open(Page.residentiaPage, self.addResidentialMould['search_btn'],havaFrame = False) self.click(self.addResidentialMould['building_info_btn']) self.click(self.addResidentialMould['add_building_btn']) self.input_text(self.addResidentialMould['building_name'], u'AutoTest') self.click(self.addResidentialMould['lng_lat_btn']) self.input_text(self.addResidentialMould['input_searchMap'], u'逸天廣場', first=False) self.click(self.addResidentialMould['input_searchMap']) self.click(self.addResidentialMould['searchMap_btn']) self.click(self.addResidentialMould['save_lng_lat_btn']) self.type_select(self.typeMould['property_use'], 'ordinary') self.type_select(self.addResidentialMould['ground_floors'], 10) self.type_select(self.addResidentialMould['underground_floors'], 2) self.type_select(self.addResidentialMould['ladder_count'], 30) self.type_select(self.addResidentialMould['house_count'], 100) self.click(self.addResidentialMould['save_unitname_btn']) # 單元 self.click(self.addResidentialMould['unit_info_btn']) self.click(self.addResidentialMould['add_unit_btn ']) self.input_text(self.addResidentialMould['unit_name'], u'AutoTest') self.click(self.addResidentialMould['save_unitname_btn']) # 樓層 self.click(self.addResidentialMould['floor_info_btn']) self.click(self.addResidentialMould['add_floor_btn']) self.input_text(self.addResidentialMould['floor_name'], u'AutoTest') self.click(self.addResidentialMould['save_unitname_btn']) # 房號 self.click(self.addResidentialMould['house_info_btn']) self.click(self.addResidentialMould['add_house_btn']) self.input_text(self.addResidentialMould['house_no'], u'AutoTest') self.click(self.addResidentialMould['save_unitname_btn']) consoleLog('棟座相關新增成功') def delResidential(self): self.open(Page.residentiaPage,self.addResidentialMould['search_btn'],havaFrame = False) # 樓盤地址 self.click(self.addResidentialMould['add_btn'])
#HouseAddPage.py
###新增房源
# -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by import By from base import SQL from base.Base import log from base.Base import consoleLog class HouseAddPage(Base): houseAddMould = { 'test' : (By.ID,'form_btn'), #測試頁面載入 #基本資訊 'property_name': (By.CSS_SELECTOR, '#td_not_found > span > input'), # 物業地址 ַ 'property_name_click': (By.CSS_SELECTOR,'#house_develop_panel_form + div > div > div'), 'contact_people': (By.CSS_SELECTOR, '#contact + span > input'), # 聯絡人 'contact_tel': (By.CSS_SELECTOR, '#contact_tel + span > input'), # 聯絡方式 #出租資訊 'rental_price': (By.CSS_SELECTOR, '#rental_price + span > input '),# 意向租金 #詳細資訊 'build_area': (By.CSS_SELECTOR, '#build_area + span > input'), # 面積 'form_btn': (By.ID, 'form_btn') # 儲存 } typeMould = { 'residential' : '#residential_name_search', #樓盤 'building': '#house_develop_panel_form + div + div > div > div', # 棟座 'unit': '#house_develop_panel_form + div + div + div > div > div', # 單元 'room_number': '#house_develop_panel_form + div + div + div + div > div >div', # 房號 'did' : '#did', #拓房部門 'uid' : '#uid', #拓房人 'house_status': 'body > div:nth-child(17) > div > div:nth-child(3)', # 房源狀態 'remark': '#remark', # 備註 'source': '#source ', #房屋來源 'rooms' : '#rooms ', #室 'livings' : '#livings ',#廳 'kitchens' : '#kitchens ',#廚 'bathrooms' : '#bathrooms ',#衛 'balconys' : '#balconys', #陽 'orientation': '#orientation', # 朝向 'property_type': '#property_type', # 物業型別 'property_use': '#property_use', # 物業用途 'fitment_type': '#fitment_type', # 裝修情況 'look_type': '#look_type', # 看房方式 'look_date': '#look_date', # 可看房日期 } @log def addhousepage(self): """新增房源""" self.open(Page.houseAddPage,self.houseAddMould['test'],havaFrame=False) #基本資訊 self.input_text(self.houseAddMould['property_name'], 'AutoTest') self.click(self.houseAddMould['property_name_click']) self.input_text(self.houseAddMould['contact_people'], 'AutoTest') self.type_click(self.typeMould['building']) self.input_text(self.houseAddMould['contact_tel'], '18279881085', first=False) self.type_click(self.typeMould['unit']) self.input_text(self.houseAddMould['contact_tel'], '18279881085', first=False) self.type_click(self.typeMould['room_number']) self.type_combotree(self.typeMould['did'],'00000000000000000000000000000000') uid = SQL.serach("select user_id from sys_user WHERE user_name = 'AutoTest' limit 1") self.type_select(self.typeMould['uid'],uid) #出租資訊 self.type_click(self.typeMould['house_status']) self.type_select(self.typeMould['source'],'INTRODUCE') self.input_text(self.houseAddMould['rental_price'], 3000, first=False) self.type_select(self.typeMould['rooms'],'1') self.type_select(self.typeMould['livings'], '1') self.type_select(self.typeMould['kitchens'], '1') self.type_select(self.typeMould['bathrooms'], '1') self.type_select(self.typeMould['balconys'], '1') #詳細資訊 self.input_text(self.houseAddMould['build_area'], '60.00') # 面積 self.type_select(self.typeMould['orientation'], 'NORTH') self.type_select(self.typeMould['property_type'], 'MULTI_LIFE') self.type_select(self.typeMould['property_use'], 'HOUSE') self.type_select(self.typeMould['fitment_type'], 'FITMENT_ROUGH') self.type_select(self.typeMould['remark'], u'Atuo備註資訊') self.type_select(self.typeMould['look_type'], 'DIRECTION') self.type_select(self.typeMould['look_date'], u'2017-08-08') self.click(self.houseAddMould['form_btn']) # 儲存 Base.succeed += 1 consoleLog('房源新增成功')
#HouseAuditPage.py
###稽核房源
# -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by import By from base.Base import log from base.Base import consoleLog class HouseAuditPage(Base): searchMould = { 'residentia_name_loc' : (By.ID,'residential_name_search'), 'search_button_loc' : (By.ID,'search_btn') } houseAuditPageloc = { 'audit_btn': (By.ID, 'audit_btn'), # 稽核 'department_did_loc' : '#residential_department_did', #責任部門 'cancel_btn': (By.ID, 'cancel_btn'), # 稽核通過 'form_btn': (By.ID, 'form_btn'), # 稽核不通過 'iszCommonWorkflowPageSure': (By.ID, 'iszCommonWorkflowPageSure'), # 確定 } @log def audit(self): """稽核房源""" self.open(Page.houseAuditPage,self.houseAuditPageloc['audit_btn']) self.input_text(self.searchMould['residentia_name_loc'],'AutoTest') self.click(self.searchMould['search_button_loc']) self.script('$("#audit_btn").click()') self.click(self.houseAuditPageloc['cancel_btn']) # 稽核通過 for i in range(1,6): try: self.click(self.houseAuditPageloc['iszCommonWorkflowPageSure']) # 確定 break except: self.click(self.houseAuditPageloc['cancel_btn']) # 稽核通過 self.check_submit() try: self.solr('house',self.test) consoleLog('solr的house-core增量成功') except: consoleLog(Exception.message,level='ERROR') consoleLog('執行house-core的增量失敗,請檢查solr是否正常') pass consoleLog('房源稽核成功')
#ApartmentPage.py
###房源定價、新增報銷單
# -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by import By from selenium.common.exceptions import NoSuchElementException import time from base.Base import log from base.Base import consoleLog class ApartmentPage(Base): apartmentMould = { #搜尋出需要的房源 'tr_house': (By.CSS_SELECTOR, 'tr[datagrid-row-index="0"]'), 'residential_name': (By.ID,'residential_name_house_code_search'),#搜尋欄物業地址 'search_btn' : (By.ID,'search_btn'),#搜尋按鈕 'details_btn' : (By.CSS_SELECTOR,'[onclick="Apartment.dialog(\'edit\',0)"]'),#詳情 'tr_apartment' : (By.CSS_SELECTOR,'tr[datagrid-row-index="0"]'), #詳情介面 'make_price_btn' : (By.ID,'btn_make_price'),#定價按鈕 #定價介面 'entire_rent_price': (By.CSS_SELECTOR,'#rent_price + span >input:nth-child(1)'),#整租-月租金 'share_rent_price' : (By.CSS_SELECTOR,'td[field=rent_price] > div > span >input:nth-child(1)'), #合租-月租金 'save_btn' : (By.CSS_SELECTOR,'#base_button > div > p > button:nth-child(2)'),#儲存 'form_btn' : (By.ID,'form_btn'), #儲存 'expense_btn' : (By.CSS_SELECTOR,'#base_button > div > button:nth-child(6)'),#報銷 'amount' : (By.CSS_SELECTOR,'#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(5) > span > input'),#報銷金額 'brepay_company': (By.CSS_SELECTOR,'#repay_company + span > input:nth-child(1)'), # 還款公司 'memo': (By.ID,'memo'), # 備註 'submit_btn': (By.ID,'submit_btn') # 提交 } typeMould = { 'item_type' : '#projectAllExpense > div > table > tbody > tr:nth-child(1) > td:nth-child(2) > input ',#報銷專案 'bear_type' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(2) > input ',#承擔方 'start_date' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(6) > input:nth-child(1)',#費用週期開始 'end_date' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(6) > input:nth-child(3)',#費用週期結算 'vacant' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(8) > input',#空置期 'first' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(9) > input',#首次 'source_bear_id' : '#projectAllExpense > div > table > tbody > tr:nth-child(3) > td:nth-child(10) > span > input:nth-child(1)',#房源方 'moneytype' : '#moneytype ',#收借款類別 'customer_name' : '#bank_name ',#姓名 'customer_bank_location' : '#bank_location ',#開戶銀行 'bank_card' : '#bank_card '#銀行卡號 } @log def addhouserent(self): """房源定價""" self.open(Page.apartmentPage, self.apartmentMould['tr_apartment']) self.input_text(self.apartmentMould['residential_name'],'AutoTest', first=False) for i in range(0, 11): self.click(self.apartmentMould['search_btn']) time.sleep(1) try: test = self.driver.find_element(*self.apartmentMould['tr_house']) break except NoSuchElementException: consoleLog('嘗試第%s次查詢,但未找到apartment-core的solr增量資料' % i,level='WARNING') time.sleep(5) # 搜尋房源 self.dblclick(self.apartmentMould['tr_apartment'], checkLoc=self.apartmentMould['make_price_btn']) # 詳情介面 self.click(self.apartmentMould['make_price_btn']) # 定價介面 self.click(self.apartmentMould['share_rent_price']) self.input_text(self.apartmentMould['share_rent_price'], 2222, first=False) self.click(self.apartmentMould['save_btn']) self.click(self.apartmentMould['form_btn']) consoleLog('新增自營房源月租金成功') @log def addReimbursement(self): """新增報銷單""" self.open(Page.apartmentPage, self.apartmentMould['tr_apartment'])相關推薦
python2.7基於selenium的web自動化測試專案--house目錄
#ResidentiaPage.py ###樓盤模組 # -*- coding:utf8 -*- from base.Base import Base from base import Page from selenium.webdriver.common.by imp
python2.7基於selenium的web自動化測試專案--user目錄
#Login.py ###封裝登入系統 # -*- coding:utf8 -*- from base.Base import Base from selenium.webdriver.common.by import By from base.Base import l
python2.7基於selenium的web自動化測試專案--base目錄檔案
Base.py ##### 各公共方法的二次封裝以及定義,如拋棄selenium最外層的定位方法,直接傳入By類的變數,既避免過長的函式定義也規範了元素定位的變數定義;同時由於系統中部分控制元件用滑鼠點選不好定位,不能靈活 的傳參,所以根據控制元件型別
基於appium自動化測試案例7--螢幕截圖(學習筆記)
#coding=utf-8 #匯入之前登陸判斷方法 from find_element.kyb_login import driver driver.find_element_by_id('com.tal.kaoyan:id/login_email_edittext').c
基於python自動化測試平臺與虛擬化技術結合的思考
主力 根據 測試 導致 文件掛載 配置 存在 自動化 作用 背景: 自動化測試行業內,個人覺得主力語言是python、java。這裏討論下基於python自動化框架設計與case開發,用過python的都知道它的好處,但是根據實際項目需要有了很多迎面而來的困難--主機遷
基於appium自動化測試案例12--使用yaml 進行資料配置(學習筆記)
在編寫appium自動化測試指令碼中,經常需要配置裝置及app的引數,如:desired_caps={} #裝置平臺名稱 desired_caps['platformName']='Android' #裝置名稱 desired_caps['deviceName']='127.
火狐外掛安裝-基於web自動化測試
一、Firebug 安裝 1、 開啟火狐瀏覽器—選擇右上角“開啟選單”(圖一)----附件元件(圖二) 圖一 圖二 2、 點選:擴充套件(圖三)—-------用於所有附加元件的工具(圖四)----選擇“從檔案安裝附加元件” 圖三  
python UI自動化測試專案記錄(二) 請求介面資料並提取資料
首先 獲取預期結果-介面響應資料,分成兩步: 1 獲取資料來源介面資料 2 提取後續頁面對比中要用到的資料 並且為了便於後續呼叫,將介面相關的都封裝到ProjectApi類中。隱去敏感資訊後的原始碼如下: 1 獲取資料來源介面資料 # coding:utf-8 import
介面自動化測試專案的一些知識整理
分享一下做過的介面測試的專案知識,簡單的整理了下,以後有時間會把其他的也整理下,大家有好的建議或者疑問的可以直接回復哦。 裡面的設計和具體的實現都存在不同程度的缺陷。以下都是實現完成並運用於專案中的。 Python Web Restful API 介面測試專案知識整理歸納 專案工具選擇 使用工具:
《手把手教你》系列練習篇之7-python+ selenium自動化測試 -壓軸篇(詳細教程)
1. 簡介 “壓軸”原本是戲曲名詞,指一場摺子戲演出的倒數第二個劇目。在現代社會中有很多應用,比如“壓軸戲”,但壓軸也是人們知識的一個盲區。“壓軸”本意是指倒數第二個節目,而不是人們常說的倒數第一個,倒數第一個節目稱“壓臺
糾結的Python2.7編碼與os.walk()函式的目錄引數
Python3與Python2.x系列的編碼處理(型別,檔案等)有所不同,具體這裡就不再介紹了,網上有很多相關文章。 這裡分享一個糾結了非常久的問題(因為一開始沒特別注意函式引數的編碼問題,所以浪費了不少時間,希望能給同樣遇到這個問題的朋友們一點幫助)。 os.walk()
關於舊基於xml的web服務專案從python2.7遷移到python3.6.2
https://www.jianshu.com/p/4e26007990f3 首先學一下前人經驗 對git進行提交,然後在pycharm或者終端用conda 進行 activate的虛擬環境進行切換. 1其實最多的處理應該會是那些print了. SyntaxError: Mis
基於Jenkins 實現php專案的自動化測試、自動打包和自動部署
本篇博文宅鳥將在上篇: 基於Jenkins 搭建持續整合環境 的基礎上,繼續介紹Jenkins結合php專案實現自動化測試和自動部署。廢話不再多說,直接上幹活。 宅鳥所使用的server為Ubuntu 要實現在jenkins中實現php的自動化測試,首先需要Jenkins伺服器上安裝ph
基於Jenkins 實現php專案的自動化測試、自動打包和自動部署(-)
基於Jenkins 實現php專案的自動化測試、自動打包和自動部署(一) 身在創業公司,碰到任何問題,都得擼起袖子加油幹: 隨著專案團隊的不斷擴大,專案因為人員的參差不齊導致各種各樣的問題。於是引入jenkins持續整合。 廢話不多說,先普及基礎概念
《Web介面開發與自動化測試基於Python語言》--第7章
《Web介面開發與自動化測試基於Python語言》–讀書筆記 第7章 介面相關概念 7.1 分層的自動化測試 測試金字塔模型: 分層自動化測試模型: 傳統自動化測試: 基於產品UI層的自動化測試,它是將黑盒功能測試轉化為
Jenkins持續整合專案搭建——基於Python Selenium自動化測試
參考連結:https://www.liaoxuefeng.com/article/1083282007018592 第一步:去官網https://jenkins.io/下載最新的war包 第二步:安裝.war包即:安裝jinkens 開啟命令視窗,進入.war包所在的路徑下 執行
學習《selenium2自動化測試基於python》遇到的問題(一)
pypi tools bsp sel dir python 解決方案 打不開 什麽 問題一: 通過cmd,用Python安裝setuptools時,報錯no module named ‘six‘等類似情況時,解決方案: 翻譯過來就是缺少SIX的模塊,直接到官網打開,下載
基於C#實現的自動化測試框架:發布自動觸發自動化回歸測試
exc 時間流 測試用例 出現 服務器 text types filter txt 接口自動化測試用例完成以後,以前都是發布以後手動運行測試用例。雖然手動運行下腳本也就是一個F5的事情,但是離自動化測試的標準差得很遠。這兩天有了個大膽的想法,想要實現以下發布時直接觸發自動化
基於python的接口自動化測試框架
urn __name__ exce 文件格式 圖片 XML pla main tex 公司內部的軟件采用B/S架構,大部分是數據的增刪改查,由於還在開發階段,所以UI界面的變化非常快,難以針對UI進行自動化測試,那樣會消耗大量的精力與時間維護自動化腳本。針對此種情況,針對接
【selenium】Selenium基於Python3的Web自動化測試腳本在IE上運行慢的解決方法
drivers 解決方法 bsp exe com 32位 方法 解決辦法 文本 闡述問題: 執行自動化腳本時,發現文本輸入在IE瀏覽器上特別慢,這樣大大降低了自動化效率 解決辦法:原因是原先下載的IEDriverServer.exe為64位系統的IE,換為32位的IED