1、同类方法的调用
import webdriver
class myclass(object):
def __inti__(self):
self.driver=webdirver.Chrome()#定义全局参数
def eg_method1(self):
a=1
def eg_method2(self)
self.eg_method1
print(a)
if __name__=="__main__":
myclass=mysclass()
myclass.eg_methond2
2、python字符格式互转
字符串与字典的转换
# 字符串转字典情况
a = "{'a':1,'b':1}"
# 方法一
b = eval(a)
print (type(b))
# 方法二
exec('c='+a)
print(type(c))
字典与列表之间的转换
# 列表合成字典
list_str=["a","b","c"]
list_int=[1,2,3]
dict_int_str={}
for i in range(len(list_int)):
dict_int_str[list_int[i]]=list_str[i]
print (dict_int_str)
# 字典拆分列表
dict_d={1:'张三',2:'王五'}
list_key=list(dict_d.keys())
list_value=list(dict_d.values())
print(list_key)
print(list_value)
3、python获取变量字符类型
a='1'
print(type(a)) # 直接打印字符类型
print(isinstance(a,str)) #判断a的字符类型是否为str,打印布尔值
4、python的random使用
import random
# 1.随机取出列表的数据
list=['java','python','php','go']
print(random.choice(list))
# 2.随机取出字典的数据
dict={'a':'java','p':'python','g':'go'}
dict_key=random.sample(dict.keys(),1) #随机取出一个键
dict_key=dict_key[0] #将取出的键由列表格式换成字符串格式
dict_value=dict_key[dict_key] #取出键对应的值
5、Ubuntu中使用python3
Ubuntu系统自带python,若没有python安装命令为
sudo apt install python3
sudo apt install python3-pip
执行python命令及pip命令也需要带上3.如
pip3 install Django
python manage.py runserver
6、pygame初始化及基础操作
import pygame
# 初始化
pygame.init()
# 创建窗口,分辨率、特性、色深
screen = pygame.display.set_mode([500,600])
# 窗口名称
pygame.display.set_caption("自动化测试工具")
done = False
# 填充白色
screen.fill(WHITE)
# 画一条直线,所在窗口,颜色,起点,终点,blend(混合?)
pygame.draw.aaline(screen, GREEN, [0, 50], [50, 80], True)
# 画矩形,所在窗口,颜色,[横坐标,纵坐标,横坐标长度,纵坐标长度],线粗
pygame.draw.rect(screen, BLUE, [100, 200, 10, 20], 1)
# 执行从填充白色的操作
pygame.display.flip()
7、python中的异常处理
try:
# 检测异常代码片段
except:
# 发生异常,需要执行的代码片段
else:
# 未发生异常时,需要执行的代码片段
finally:
# 不管是否异常,最终需要执行的代码片段
8、字符串的操作
①将字符串格式修改为首字母大写
str1 = "abcABC1"
print(str1.capitalize())
# 结果为:Abcabc1
②字符串大小写替换
str1 = "abcABC1"
print(str1.swapcase())
# 结果为:ABCabc1
③截取字符串的两个引号之间的数据
a = "text:'test1']"
b = "[text:'test2']"
print(a[6:-1],b[6:-1])
9、selenium中的坑
用selenium获取标签的数量时,遇到"object type of ‘element’ has no len() "的错误,百度未找到答案
menubody = driver.find_element(By.XPATH, "//div[text()='供应商名称']/../../../../../../../tbody")
rowstr = menubody.find_element_by_tag_name('tr')
rows = int(len(rowstr))
将上述rowstr的类型打印出来,发现他是class element类型,无法使用len()函数,于是又翻了一下官方文档,才发现有find_elements方法。增加s后,rowstr的字符类型变为了list,即解决了报错,达到了目的
menubody = driver.find_element(By.XPATH, "//div[text()='供应商名称']/../../../../../../../tbody")
rowstr = menubody.find_elements_by_tag_name('tr')
rows = int(len(rowstr))
10、面向对象理解
class car():
#声明成员属性---可以认为是一系列的 变量
wheelNO=4 # 声明在class 定义下第一层的 属性(变量) 属于整个类 所用。 使用时 要通过类名称加点号 调用。 例:car.wheelNO
#声明类的构造方法: # 构造方法 是一个class中必须存在的方法, 作用: 1.实例化对象(创建该类型的实际数据) 2.为实例进行属性的 初始化
def __init__(self,co='黑色',ty='轿车',br='BYD'):
self.color = co # self 表示实例(类的每一个实际数据)自身。 self.变量名 声明的是 属于实例自身的 成员属性
self.type = ty
self.brand = br
#声明成员方法(本质是函数) 。 方法中通常第一个参数是"self", 代表该方法 属于该类的实例的 方法
def move(self,x,y):
print('本实例',id(self), '移动到的新坐标是',x,y)
self.v1=100
# 如果写了 上面这句话, 语法上表示: 当该类的 某一个实例 调用了move方法后, 这个实例会增加一个成员 属性v1 且值为100
# 但在实例 没调用move方法 之前 , 实例自身是没有v1属性的
# 注: 上面的 "self.v1" 仅仅为了说明 语法规则, 不代表v1 在 car类中 有什么具体 功能意义。
def printSelf(self):
print(self.brand,self.color,self.type) # 在本方法中 通过"self.属性名" 表示访问本实例的 其他成员
# 以上代码 可以表示 类的实例成员 之间的相互访问
# 不属于 实例的方法
# 1)静态成员方法
@staticmethod # 在类的成员方法定义上一行 加上 “@名称 ” 这种语法格式 称为“装饰器”
def roolback():
print('这是 该类的静态方法') #静态方法 通过类名称 加点号 调用, 例: ca.roolback()
# 2)类方法
@classmethod
def clsM1(cls): # 也通过类名称 调用的方法
print('属于类自身的方法')
# 创建car类型的 实例(该类型的 实际数据)
c1=car() # 创建car类的实例 会自动的 调用类中的 " __init__()" 方法, 调用形式上的变化 遵守函数参数 语法规则
# 例如上面这行, 调用了__init__方法 但没有传递任何参数, 表示使用该方法的 默认参数值
c2=car('白色','SUV',"BMW")
c3=car(ty="MPV",co='灰色',br="五菱")
c1.printSelf()
c2.printSelf()
# print(c1.v1)
c3.move(10, 20)
c2.move(100, 200)
print(c2.v1,c3.v1)
# 调用 类的成员, 它们不属于 类的实例, 只属于类自身, 只能通过 类名称 调用
print(car.wheelNO)
car.roolback()
car.clsM1()
11、面向对象子父级理解
class A(object): # 定义 父类(超类 --super class)
def __init__(self):
self.v1=10
self.__v2=20
def AObjM1(self):
print('AObjeM1')
def __AObjM2(self):
print('AObjM2')
#定义 子类
class B(A):
def __init__(self): # 如果 子类单独写了 构造方法 将会覆盖 父类继承过来的 构造方法, 此时父类的构造方法 不会 自动执行
self.v3=30
super().__init__() # 明确 声明调用 父类的构造方法
def BObjeM1(self):
print('BObjeM1')
#self.__AObjM2() # 父类的私有 成员无法继承到 子类中, 这句是会报错的
# print(self.__v2)
print(self.v1,self.v3)
b1=B() # 创建子类实例
b1.BObjeM1()
print(b1.v1)
b1.AObjM1()
获取dict中第n个键值对的value
dict1={'a':'a','b':'b','c':'c'}
value_n=dict1[dict1.keys()[1]]
# 当py升级后发现上述情况竟然会报错,print了dict.keys()的类型才知道不正确
value_n=dict1[list(dict1.keys())[1]]
PS:还在疯狂学习python中,若不正确,还请指教。。。