[TOC]
### **繼承:**
```
1.子類擁有父類的屬性和方法(私有屬性 和 私有方法除外)
2.繼承的優點:
① 去除重復代碼
② 簡化代碼結構
3.語法: class 子類名(父類名)
4.子類繼承父類后,就可以調用父類的屬性和方法
5.子類中可以自定義自己的屬性和方法
6.繼承中,父類不能使用子類的屬性和方法
7.多層繼承,孫子類繼承了父親類,父親類繼承了爺爺類,
孫子可以直接使用爺爺的方法/屬性,
爺爺類/父類 不能訪問孫子類中的屬性和方法
8.注意:
繼承不是復制,訪問子類屬性時,先到子類中查找,子類中沒有該屬性,則去父類中查找
```
<details>
<summary>實現單繼承.py</summary>
```
# 目標:實現單繼承
# 定義Animal類
class Animal:
'''動物類'''
def __init__(self):
self.name = "動物"
self.age = 2
def eat(self):
print("%s 都愛吃..." % self.name)
class Cat(Animal): # 單繼承 子類(父類)
'''貓類'''
def catch(self):
print("小貓抓老鼠...")
animal = Animal()
print(animal.name)
print(animal.age)
animal.eat()
# 父類對象無法調用子類的方法,也不能訪問子類的屬性
# animal.catch()
print("-" * 50)
tom = Cat()
print(tom.name)
print(tom.age)
# 子類對象可以調用父類的方法
tom.eat()
# 繼承不是復制
# 訪問子類屬性時,先到子類中查找
# 子類中沒有該屬性,則去父類中查找
```
</details>
<br />
<details>
<summary>03_方法重寫_功能覆蓋.py</summary>
```
# 目標:實現 03_方法重寫_功能覆蓋
'''
重寫:
概念:子類中有與父類相同的方法名,子類重寫了父類的方法
原因:父類的方法不能滿足子類的需求
前提:方法重寫的前提條件,要有繼承關系
分類:
1. 功能覆蓋: 子類重寫的方法與父類完全不同
2. 功能擴展: 在父類方法基礎上進行功能擴展
注意:子類重寫了父類的方法后,調用方法時,調用的是自己重寫后的方法
'''
# 爺爺類
class Animal:
'''動物類'''
def __init__(self):
self.name = "動物"
self.age = 2
def eat(self):
print("%s 都愛吃..." % self.name)
# 父類
class Cat(Animal): # 單繼承 子類(父類)
'''貓類'''
def catch(self):
print("小貓抓老鼠...")
# 孫子類
class BoSimao(Cat):
'''波斯貓類'''
def catch(self):
print("波斯貓抓魚吃...")
bsm = BoSimao()
# 子類重寫了父類的方法后,調用方法時,調用的是自己重寫后的方法
bsm.catch()
```
</details>
<br />
<details>
<summary>04_方法重寫_功能擴展.py</summary>
```
# 目標:實現 04_方法重寫_功能擴展
# 爺爺類
class Animal:
'''動物類'''
def __init__(self):
self.name = "動物"
self.age = 2
def eat(self):
print("%s 都愛吃..." % self.name)
# 父類
class Cat(Animal): # 單繼承 子類(父類)
'''貓類'''
def catch(self):
print("小貓抓老鼠...")
# 孫子類
class BoSimao(Cat):
'''波斯貓類'''
def catch(self):
# 功能擴展:在子類重寫的方法中調用父類的方法,
# 1. super().重寫的方法名()
super().catch()
# 2. 父類名.方法名(self)
# 不推薦使用,父類名修改后,在調用的地方也需要修改父類名,不方便
Cat.catch()
print("波斯貓抓魚吃...")
bsm = BoSimao()
# 子類重寫了父類的方法后,調用方法時,調用的是自己重寫后的方法
bsm.catch()
```
</details>
<br />
```
super類的總結:
1. super是一種特殊的類
2. super()通過super類創建的實例對象
3.使用super類創建的實例對象調用重寫父類的方法,可以做到對父類的方法進行功能擴展
父類的私有屬性和私有方法:
1.子類不能直接訪問父類的私有屬性
2.子類不能直接調用父類的私有方法
3.通過對外提供訪問私有屬性方法,間接訪問
def get_pwd(self):
'''獲取私有屬性'''
return self.__password
def set_pwd(self, new_pwd):
'''設置私有屬性'''
self.__password = new_pwd
def func_secret(self):
'''調用私有方法'''
self.__secret()
```
<details>
<summary>05_繼承中的私有屬性和私有方法.py</summary>
```
# 05_繼承中的私有屬性和私有方法
class Father:
'''父類'''
def __init__(self):
self.name = "老王"
# 前置雙下劃線的屬性是私有屬性
self.__password = 123456
# 在類的內部對外提供訪問私有屬性的借口 get / set
def get_pwd(self):
'''獲取私有屬性'''
return self.__password
def set_pwd(self, new_pwd):
'''設置私有屬性'''
self.__password = new_pwd
def func_secret(self):
'''調用私有方法'''
self.__secret()
def eat(self):
'''吃方法'''
# 在類內可以使用 self.私有屬性名 訪問私有屬性
print("%s 愛吃東西,使用密碼是%d,可以買東西" % (self.name, self.__password))
def __secret(self):
'''私有方法'''
# 前置雙下劃線的方法是私有方法
print("%s 的個人秘密,銀行卡密碼是:%d" % (self.name, self.__password))
class Son(Father):
'''子類'''
def run(self):
'''跑方法'''
print("小王喜歡游山玩水...")
xiao_wang = Son()
print(xiao_wang.name)
# 在類外,子類對象無法直接訪問父類的私有屬性
# print(xiao_wang.__password)
xiao_wang.eat()
# 在類外,子類對象無法直接訪問父類的私有方法
# xiao_wang.__secret()
print(dir(xiao_wang))
ret = xiao_wang.get_pwd()
print(ret)
xiao_wang.set_pwd(10086)
ret = xiao_wang.get_pwd()
print(ret)
```
</details>
<br />
### **多繼承:**
```
1.一個子類繼承多個父類
2.格式:子類(父類名1,父類名2...)
3.多繼承時,子類擁有父類的所有方法和屬性(不包括私有屬性和私有方法)
```
<details>
<summary>06_多繼承.py</summary>
```
# 06_多繼承
'''
騾子 是 驢和馬的后臺
騾子 mule
驢 donkey
馬 horse
'''
class Horse:
'''馬類'''
def __init__(self):
self.name = "馬"
def run(self):
print("馬跑得快")
class Donkey:
'''驢類'''
def walk(self):
print("驢走得遠")
class Mule(Horse, Donkey): # 多繼承 子類(子類1,子類2)
'''騾子類'''
pass
# 多繼承中,子類可以訪問所有父類中所有屬性和方法(不包含私有屬性和私有方法)
mu = Mule()
print(mu.name)
mu.run()
mu.walk()
```
</details>
<br />
<details>
<summary>07_多繼承中父類有相同的方法.py</summary>
```
# 07_多繼承中父類有相同的方法
class Horse:
'''馬類'''
def run(self):
# 跑方法
print("馬跑得快")
def walk(self):
# 走方法
print("馬走不遠")
class Donkey:
'''驢類'''
def walk(self):
print("驢走得遠")
def run(self):
# 跑方法
print("驢跑不快")
class Mule(Horse, Donkey): # 多繼承 子類(子類1,子類2)
'''騾子類'''
pass
mu = Mule()
mu.run()
mu.walk()
# __mro__ 方法解析順序
print(Mule.__mro__)
'''
多繼承,父類有相同的方法名,參考 __mro__ 方法解析順序來調用
1.查看 創建當前對象mu 的類模板 Mule
2.拿著類模板 Mule到 __mro__ 方法解析順序 查找
3.如果找到了,則調用其中的方法,如果沒有調用的方法,查找下一個類中的方法
4.最終都沒有找到對應的方法,則報錯
'''
```
</details>
<br />
```
python2.x解釋器是經典類 默認不繼承 object
python3.x解釋器是新式類 默認繼承 object
推薦大家定義類時,加上繼承 object
class Animal(object):
pass
```
<details>
<summary>08_多態.py</summary>
```
# 08_多態
'''
1. 在 Dog 類中封裝方法 game
普通狗只是簡單的玩耍
2. 定義 XiaoTianDog 繼承自 Dog ,并且重寫 game 方法
哮天犬需要在天上玩耍
3. 定義 Person 類,并且封裝一個 和狗玩 的方法
在方法內部,直接讓 狗對象 調用 game 方法
'''
class Dog:
'''普通狗類'''
def __init__(self, name):
self.name = name
def game(self):
'''玩耍的方法'''
print("普通狗只是在地上簡單的玩耍")
class XianTianQuan(Dog):
'''哮天犬類'''
def __init__(self, name):
self.name = name
def game(self):
print("%s 在天上快樂的玩耍" % self.name)
class Person:
'''人類'''
def __init__(self, name):
self.name = name
def play_with_dog(self, dog):
print("人物:%s 和 狗對象:%s 一起玩耍" % (self.name, dog.name))
# 狗對象 調用 game 方法
# 不同的對象 調用相同的方法,產生不同的結果狀態,叫做多態
dog.game()
wang_cai = Dog("旺財")
xtq = XianTianQuan("哮天犬")
changwei = Person("常威")
# 調用和狗玩的方法
changwei.play_with_dog(wang_cai)
print("-" * 50)
changwei.play_with_dog(xtq)
'''
多態成立的三個條件:
1.要有繼承
2.要有方法的重寫
3.要有父類的對象或子類的對象作為方法的參數
Python中的多態是"鴨子模型", Python中的多態要求不是很嚴格
'''
```
</details>
<br />
```
一個類模板可以創建多個實例對象,
每個實例對象的內存空間彼此獨立,互不干擾,
實例屬性保存在實例對象的內存空間,
實例方法保存在類模板中的,
但是,使用實例對象調用實例方法時,是一個動態綁定的過程。
```
<details>
<summary>09_實例對象_實例屬性_實例方法.py</summary>
```
# 09_實例對象_實例屬性_實例方法
class Person(object):
'''人類'''
def __init__(self, name):
self.name = name
def eat(self):
print("%s 愛吃美食..." % self.name)
xiao_ming = Person("小明")
print(xiao_ming)
print(xiao_ming.name) # 實例對象中的屬性是 實例屬性
print("id(xiao_ming.name):", id(xiao_ming.name))
xiao_ming.eat() # 實例對象可以調用的方法,并且具有self參數,是實例方法
print("id(xiao_ming.eat):", id(xiao_ming.eat))
print("-" * 50)
xiao_wang = Person("小王")
print(xiao_wang)
print(xiao_wang.name)
print("id(xiao_wang.name):", id(xiao_wang.name))
xiao_wang.eat()
print("id(xiao_wang.eat):", id(xiao_wang.eat()))
```
</details>
<br />
### **類對象:**
```
1.類模板就是類對象
2. Python解釋器遇到 class關鍵字, class關鍵字后面的變量名就是類對象名,
類對象名保存類模板空間地址引用
3.類對象一般只有一個,實例對象可以有多個,通過類對象創建實例對象
4. Python中一切皆對象,函數,數字,方法,類都是對象
```
<details>
<summary>10_類對象.py</summary>
```
# 10_類對象
class Person(object):
'''人類'''
def __init__(self, name):
self.name = name
def eat(self):
print("%s 愛吃美食..." % self.name)
print(Person)
print("id(Person):", id(Person))
```
</details>
<br />
### **類屬性:**
作用:主要用來記錄類對象的相關特征
1. 也是一種屬性,屬于類對象的屬性(存在類模板中),在創建類對象時只被初始化一次
2. 定義在類的內部,方法外部
3. 訪問類屬性的方式
①.類名.類屬性名(推薦)
②.實例對象名.類屬性名(不推薦)
4. 注意:通過實例對象并沒有修改類屬性的值,而是定義了一個與類屬性同名的實例屬性
5. 使用類屬性可以在不破壞類的封裝特性前提下實現某些功能
<details>
<summary>11_類屬性.py</summary>
```
# 11_類屬性
# 需求:統計當前類模板創建了幾個實例對象
# 類模板就是一個對象,簡稱類對象
class Person(object):
'''人類'''
# 類屬性,定義在方法外邊,類的內部
# 作用:主要用來記錄類對象的相關特征
count = 0
print("----類模板初始化一次----")
def __init__(self, name):
# 實例屬性
self.name = name
print("---初始化方法__init__----")
# 使用 類屬性 統計當前類模板創建了幾個實例對象
# 訪問類屬性,使用 類名.屬性名
Person.count += 1
def eat(self):
print("%s 愛吃美食..." % self.name)
xiao_ming = Person("小明")
xiao_wang = Person('小王')
xiao_wang = Person('小王1')
# 類外訪問 類屬性的方式
# 1.類名.類屬性名
print("當前創建實例對象個數是:" ,Person.count)
# 2.實例對象.類屬性名
print("xiao_ming.count:", xiao_ming.count)
print("-" * 50)
# 修改類屬性
# 類名.類屬性 = 值
Person.count = 10
print('當前類屬性的值,Person.count:', Person.count)
# 實例對象.類屬性 = 值
# 注意:使用 實例對象,類屬性的方式 不能修改類屬性的值
# 僅僅是 給實例對象添加了一個 同類屬性同名
xiao_ming.count = 20 # Error
print("xiao_ming.count:", xiao_ming.count)
print('當前類屬性的值,Person.count:', Person.count)
```
</details>
<br />
### **類方法:**
```
1.類方法是一種特殊的方法,用來處理類屬性或調用其它類方法
2.定義類方法,只需要在普通方法上面添加 @classmethod,第一個參數是cls
格式:@classmethod
def 方法名(cls):
pass
3.注意@classmethod是一種語法糖(語法現象),裝飾器(
修飾器),告訴 python解釋器,當前的方法是特殊的方法(類方法)
4.參數cls表示調用當前方法的類對象的引用
5.調用類方法:
①類名類方法名() 推薦
②實例對象名類方法名() 不推薦使用(因為實例對象一般訪問的是實例方法)
```
<details>
<summary>12_類方法.py</summary>
```
# 12_類方法
class Person(object):
'''人類'''
# 類屬性,定義在方法外邊,類的內部
# 作用:主要用來記錄類對象的相關特征
count = 0
def __init__(self, name):
# 實例屬性
self.name = name
def eat(self):
print("%s 愛吃美食..." % self.name)
# 裝飾器,也叫修飾器,告訴python解釋器,這是一個類方法,特殊對待,不要報錯
@classmethod
def get_count(cls):
'''類方法'''
print("1.類方法的作用:處理類屬性 或 調用其他類方法")
print("2.cls參數保存的是當前類對象的引用,cls:", cls)
cls.count += 100
return cls.count
print(Person)
# 調用類方法
# 類對象名.類方法名()
ret = Person.get_count()
print(ret)
xiao_ming = Person("小明")
ret = xiao_ming.get_count()
print(ret)
```
</details>
<br />
### **靜態方法:**
```
1.靜態方法既不需要self參數,也不需要cls參數
2.靜態方法中不需要用到實例對象的實例屬性和實例方法,也不需要用到類對象的類屬性和類方
3.靜態方法不會破壞類的封裝性
4.定義靜態方法,只需要在普通方法上面添加@staticmethod,沒有參數(可以手動人為的添加
格式: @staticmethod
def 靜態方法名():
pass
5.裝飾器@staticmethod裝飾的是靜態方法名,告訴 python解釋器下面的方法是特殊的方法,
6.調用靜態方法
①類名靜態方法名()
②實例對象名,靜態方法名()
7.使用場景:比如打印菜單等簡單的操作
```
<details>
<summary>13_靜態方法.py</summary>
```
# 13_靜態方法
class Person(object):
'''人類'''
# 類屬性,定義在方法外邊,類的內部
# 作用:主要用來記錄類對象的相關特征
count = 0
def __init__(self, name):
# 實例屬性
self.name = name
def eat(self):
print("%s 愛吃美食..." % self.name)
# 裝飾器,也叫修飾器,告訴python解釋器,這是一個類方法,特殊對待,不要報錯
@classmethod
def get_count(cls):
'''類方法'''
print("1.類方法的作用:處理類屬性 或 調用其他類方法")
print("2.cls參數保存的是當前類對象的引用,cls:", cls)
cls.count += 100
return cls.count
@staticmethod
def func_static():
'''靜態方法'''
print("1.靜態方法中不需要self參數,也不需要cls參數")
print("2.靜態方法中不需要實例屬性,也不需要類屬性")
print("3.靜態方法中不需要實例方法,也不需要類方法")
print("4.靜態方法還不能破壞類的封裝性")
@staticmethod
def get_sum(a, b):
print("%d + %d = %d" % (a, b, a+b))
# 調用靜態方法
# 類名.靜態方法名()
Person.func_static()
print("-" * 50)
# 實例對象.靜態方法名()
xiao_hua = Person("小花")
xiao_hua.func_static()
xiao_hua.get_sum(10, 20)
```
</details>
<br />
<br />
<details>
<summary>14_案例實現.py</summary>
```
# 14_案例實現
'''
1.設計一個 Game 類
2.屬性
定義一個類屬性 top_score 記錄游戲的 歷史最高分
定義一個實例屬性 player_name 記錄 當前游戲的玩家姓名
3.方法
靜態方法 show_help 顯示游戲幫助信息
類方法 show_top_score 顯示歷史最高分
實例方法 start_game開 始當前玩家的游戲
4.主程序步驟
1)查看幫助信息
2)查看歷史最高分
3)創建游戲對象,開始游戲
'''
class Game:
'''游戲類'''
# 類屬性 記錄游戲的 歷史最高分
top_score = 0
def __init__(self, player_name):
# 記錄 當前游戲的玩家姓名
self.player_name = player_name
@staticmethod
def show_help():
'''靜態方法'''
print("顯示游戲幫助信息:不能讓僵尸走進房間")
@classmethod
def show_top_score(cls):
'''類方法'''
print("顯示歷史最高分:", cls.top_score)
def start_game(self):
'''實例方法'''
print("游戲開始...")
print("%s 玩家玩的很happy..." % self.player_name)
# 修改歷史最高分
Game.top_score += 100
# 4.主程序步驟
# 1)查看幫助信息
Game.show_help()
# 2)查看歷史最高分
Game.show_top_score()
# 3)創建游戲對象,開始游戲
xiao_ming = Game("小明")
xiao_ming.start_game()
Game.show_top_score()
```
</details>
<br />
- Linux
- Linux 文件權限概念
- 重點總結
- Linux 文件與目錄管理
- 2.1 文件與目錄管理
- 2.2 文件內容查閱
- 文件與文件系統的壓縮,打包與備份
- 3.1 Linux 系統常見的壓縮指令
- 3.2 打包指令: tar
- vi/vim 程序編輯器
- 4.1 vi 的使用
- 4.2 vim編輯器刪除一行或者多行內容
- 進程管理
- 5.1 常用命令使用技巧
- 5.2 進程管理
- 系統服務 (daemons)
- 6.1 通過 systemctl 管理服務
- Linux 系統目錄結構
- Linux yum命令
- linux系統查看、修改、更新系統時間(自動同步網絡時間)
- top linux下的任務管理器
- Linux基本配置
- CentOS7開啟防火墻
- CentOS 使用yum安裝 pip
- strace 命令
- Linux下設置固定IP地址
- 查看Linux磁盤及內存占用情況
- Mysql
- 關系數據庫概述
- 數據庫技術
- 數據庫基礎語句
- 查詢語句(--重點--)
- 約束
- 嵌套查詢(子查詢)
- 表emp
- MySQL數據庫練習
- 01.MySQL數據庫練習數據
- 02.MySQL數據庫練習題目
- 03.MySQL數據庫練習-答案
- Mysql遠程連接數據庫
- Python
- python基礎
- Python3中字符串、列表、數組的轉換方法
- python字符串
- python安裝、pip基本用法、變量、輸入輸出、流程控制、循環
- 運算符及優先級、數據類型及常用操作、深淺拷貝
- 虛擬環境(virtualenv)
- 網絡編程
- TCP/IP簡介
- TCP編程
- UDP編程
- 進程和線程
- 訪問數據庫
- 使用SQLite
- 使用MySQL
- Web開發
- HTML簡介
- Python之日志處理(logging模塊)
- 函數式編程
- 高階函數
- python報錯解決
- 啟動Python時報“ImportError: No module named site”錯誤
- python實例
- 01- 用python解決數學題
- 02- 冒泡排序
- 03- 郵件發送(smtplib)
- Django
- 01 Web應用
- Django3.2 教程
- Django簡介
- Django環境安裝
- 第一個Django應用
- Part 1:請求與響應
- Part 2:模型與后臺
- Part 3:視圖和模板
- Part 4:表單和類視圖
- Part 5:測試
- Part 6:靜態文件
- Part 7:自定義admin
- 第一章:模型層
- 實戰一:基于Django3.2可重用登錄與注冊系統
- 1. 搭建項目環境
- 2. 設計數據模型
- 3. admin后臺
- 4. url路由和視圖
- 5. 前端頁面設計
- 6. 登錄視圖
- 7. Django表單
- 8. 圖片驗證碼
- 9. session會話
- 10. 注冊視圖
- 實戰二:Django3.2之CMDB資產管理系統
- 1.項目需求分析
- 2.模型設計
- 3.數據收集客戶端
- 4.收集Windows數據
- 5.Linux下收集數據
- 6.新資產待審批區
- 7.審批新資產
- django 快速搭建blog
- imooc-Django全棧項目開發實戰
- redis
- 1.1 Redis簡介
- 1.2 安裝
- 1.3 配置
- 1.4 服務端和客戶端命令
- 1.5 Redis命令
- 1.5.1 Redis命令
- 1.5.2 鍵(Key)
- 1.5.3 字符串(string)
- 1.5.4 哈希(Hash)
- 1.5.5 列表(list)
- 1.5.6 集合(set)
- 1.5.7 有序集合(sorted set)
- Windows
- Win10安裝Ubuntu子系統
- win10遠程桌面身份驗證錯誤,要求的函數不受支持
- hm軟件測試
- 02 linux基本命令
- Linux終端命令格式
- Linux基本命令(一)
- Linux基本命令(二)
- 02 數據庫
- 數據庫簡介
- 基本概念
- Navicat使用
- SQL語言
- 高級
- 03 深入了解軟件測試
- day01
- 04 python基礎
- 語言基礎
- 程序中的變量
- 程序的輸出
- 程序中的運算符
- 數據類型基礎
- 數據序列
- 數據類型分類
- 字符串
- 列表
- 元組
- 字典
- 列表與元組的區別詳解
- 函數
- 案例綜合應用
- 列表推導式
- 名片管理系統
- 文件操作
- 面向對象基礎(一)
- 面向對象基礎(二)
- 異常、模塊
- 05 web自動化測試
- Day01
- Day02
- Day03
- Day04
- Day05
- Day06
- Day07
- Day08
- 06 接口自動化測試
- 軟件測試面試大全2020
- 第一章 測試理論
- 軟件測試面試
- 一、軟件基礎知識
- 二、網絡基礎知識
- 三、數據庫
- SQL學生表 — 1
- SQL學生表 — 2
- SQL查詢 — 3
- SQL經典面試題 — 4
- 四、linux
- a. linux常用命令
- 五、自動化測試
- 自動化測試
- python 筆試題
- selenium面試題
- 如何判斷一個頁面上元素是否存在?
- 如何提高腳本的穩定性?
- 如何定位動態元素?
- 如何通過子元素定位父元素?
- 如果截取某一個元素的圖片,不要截取全部圖片
- 平常遇到過哪些問題?如何解決的
- 一個元素明明定位到了,點擊無效(也沒報錯),如果解決?
- selenium中隱藏元素如何定位?(hidden、display: none)
- 六、接口測試
- 接口測試常規面試題
- 接口自動化面試題
- json和字典dict的區別?
- 測試的數據你放在哪?
- 什么是數據驅動,如何參數化?
- 下個接口請求參數依賴上個接口的返回數據
- 依賴于登錄的接口如何處理?
- 依賴第三方的接口如何處理
- 不可逆的操作,如何處理,比如刪除一個訂單這種接口如何測試
- 接口產生的垃圾數據如何清理
- 一個訂單的幾種狀態如何全部測到,如:未處理,處理中,處理失敗,處理成功
- python如何連接數據庫操作?
- 七、App測試
- 什么是activity?
- Activity生命周期?
- Android四大組件
- app測試和web測試有什么區別?
- android和ios測試區別?
- app出現ANR,是什么原因導致的?
- App出現crash原因有哪些?
- app對于不穩定偶然出現anr和crash時候你是怎么處理的?
- app的日志如何抓取?
- logcat查看日志步驟
- 你平常會看日志嗎, 一般會出現哪些異常
- 抓包工具
- fiddler
- Wireshark
- 安全/滲透測試
- 安全性測試都包含哪些內容?
- 開放性思維題
- 面試題
- 字節測試面試
- 一、計算機網絡
- 二、操作系統
- 三、數據庫
- 四、數據結構與算法
- 五、Python
- 六、Linux
- 七、測試用例
- 八、智力/場景題
- 九、開放性問題
- python3_收集100+練習題(面試題)
- python3_100道題目答案
- 接口測試
- 接口測試實例_01
- python+requests接口自動化測試框架實例詳解
- 性能測試
- 性能測試流程
- 性能測試面試題
- 如何編寫性能測試場景用例
- 性能測試:TPS和QPS的區別
- jmeter
- jmeter安裝配置教程
- Jmeter性能測試 入門
- PyCharm
- 快捷工具
- 1-MeterSphere
- 一、安裝和升級
- 2- MobaXterm 教程
- 3-fiddler抓包
- 4-Xshell
- Xshell的安裝和使用
- Xshell遠程連接失敗怎么解決
- 5-Vmware
- Vmware提示以獨占方式鎖定此配置文件失敗
- Windows10徹底卸載VMWare虛擬機步驟
- VM ware無法關機,虛擬機繁忙
- VMware虛擬機下載與安裝
- 解決VM 與 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以運行 VM 的方法
- VMware虛擬機鏡像克隆與導入
- 6-WPS
- 1.WPS文檔里的批注怎么刪除
- 2.wps表格中設置圖表的坐標
- 3. wps快速繪制數學交集圖
- 7-MongoDB
- Win10安裝配置MongoDB
- Navicat 15.x for MongoDB安裝破解教程
- Apache
- apache層的賬戶權限控制,以及apache黑名單白名單過濾功能
- HTTP / HTTPS協議
- HTTP協議詳解
- 代理
- 狀態碼詳解
- HTTPS詳解
- Selenium3+python3
- (A) selenium
- selenium自動化環境搭建(Windows10)
- 火狐firebug和firepath插件安裝方法(最新)
- 元素定位工具和方法
- Selenium3+python3自動化
- 新手學習selenium路線圖---學前篇
- 1-操作瀏覽器基本方法
- 2-八種元素定位方法
- 3-CSS定位語法
- 4-登錄案例
- 5-定位一組元素find_elements
- 6-操作元素(鍵盤和鼠標事件)
- 7-多窗口、句柄(handle)
- 8-iframe
- 9-select下拉框
- 10-alert\confirm\prompt
- 11-JS處理滾動條
- 12-單選框和復選框(radiobox、checkbox)
- 13-js處理日歷控件(修改readonly屬性)
- 14-js處理內嵌div滾動條
- 15-table定位
- 16-js處理多窗口
- 17-文件上傳(send_keys)
- 18-獲取百度輸入聯想詞
- 19-處理瀏覽器彈窗
- 20-獲取元素屬性
- 21-判斷元素存在
- 22-爬頁面源碼(page_source)
- 23-顯式等待(WebDriverWait)
- 24-關于面試的題
- 25-cookie相關操作
- 26-判斷元素(expected_conditions)
- 27-判斷title(title_is)
- 28-元素定位參數化(find_element)
- 29-18種定位方法(find_elements)
- 30- js解決click失效問題
- 31- 判斷彈出框存在(alert_is_present)
- 32- 登錄方法(參數化)
- 33- 判斷文本(text_to_be_present_in_element)
- 34- unittest簡介
- 35- unittest執行順序
- 36- unittest之裝飾器(@classmethod)
- 37- unittest之斷言(assert)
- 38- 捕獲異常(NoSuchElementException)
- 39- 讀取Excel數據(xlrd)
- 40- 數據驅動(ddt)
- 41- 異常后截圖(screenshot)
- 42- jenkins持續集成環境搭建
- 43- Pycharm上python和unittest兩種運行方式
- 44- 定位的坑:class屬性有空格
- 45- 只截某個元素的圖
- 46- unittest多線程執行用例
- 47- unittest多線程生成報告(BeautifulReport)
- 48- 多線程啟動多個不同瀏覽器
- (B) python3+selenium3實現web UI功能自動化測試框架
- (C) selenium3常見報錯處理
- 書籍
- (D)Selenium3自動化測試實戰--基于Python語
- 第4章 WebDriver API
- 4.1 從定位元素開始
- 4.2 控制瀏覽器
- 4.3 WebDriver 中的常用方法
- 4.4 鼠標操作
- 4.5 鍵盤操作
- 4.6 獲得驗證信息
- 4.7 設置元素等待
- 4.8 定位一組元素
- 4.9 多表單切換
- 4.10 多窗口切換
- 4.11 警告框處理
- 4.12 下拉框處理
- 4.13 上傳文件
- 4.14 下載文件
- 4.15 操作cookie
- 4.16 調用JavaScript
- 4.17 處理HTML5視頻播放
- 4.18 滑動解鎖
- 4.19 窗口截圖
- 第5章 自動化測試模型
- 5.3 模塊化與參數化
- 5.4 讀取數據文件
- 第6章 unittest單元測試框架
- 6.1 認識unittest