学习建议
python基本语法掌握,读写文件,for,while条件表达式 体现在编程思维
函数面对对象拼接 对象类型衔接和对象是否需要有return
对于网页自动化业务的理解 -体现在具象化设计
定位器如何选型
webdriver APi应用 -体现在业务理解
学习资料
补充业务理解
self.driver.refresh() 可以理解F5,刷新完后注意需要和self.driver.current_url结合断言。
self.driver.forward() #前进第二个网页 需要有2个网页,从a-b-a 就是前进加后退
self.driver.back() # 返回第一个网页
关注点
#可以思考下这些问题
#文件读写
#path ="" #路径拼接,这里需要自己填写
#with open(path,"w+",encoding="utf-8")as fp:
#if os.path.exists(fname): 判断文件是否存在,如果不存在os.mkdir
#obj对象判断是否为为布尔,拿一些扩展数据时需要dict的方式一层层拿。
# 面对对象&单元测试
#type拿到对象的数据类型 self.assertInstance断言数据类型
#函数内套函数,函数和函数之间执行。
#同一类函数放在同1个类里面。
#unittest执行条件以及需要类继承unittest.TestCase
#assertIsNone补充1个,return None在什么情况下出现
#unittest.skip系列跳过的3个装饰器
# 八种定位器 需要连接self.driver
#find_element_by_id(),find_element_by_name()
#find_element_by_link_text(),find_element_by_partial_link_text()
#find_element_by_tag_name(),find_element_by_class_name()
#find_element_by_xpath(),find_element_by_css_selector()
#定位元素element后,要做扩展在element引用方法
#能用id用id,修改位置也不会改,有name也可以用。
#文本链接建议用link_text,其他用万金油,建议是用xpath,css定位器不要和隐式等待一起出现,而且一直往前容易在没有限制等待时失败。
演示代码
等加了更多注释后,在传个链接进来。
def assert_up_pic():
"核心定位器css_selector 断言上传文本"
try:
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
sleep(3)
# 使用name定位器
driver.maximize_window()
import time
time.sleep(3)
dr_size =driver.get_window_size() #size的尺寸
#如果有id就先用id,有name 其次是xpath和css选择
cookies =driver.get_cookies()
print("尺寸{0},缓存{1}".format(dr_size,cookies[0].get("value")))
time.sleep(1) #思考时间
a =driver.find_element_by_css_selector("form > span.bg.s_ipt_wr.quickdelete-wrap > span")
print("图片",a.text,a.size) #a.text a是图片,所以这个方法拿不到东西 a.size是一个字典
#a.size是字典类型
driver.find_element_by_css_selector("form > span.bg.s_ipt_wr.quickdelete-wrap > span").click()
driver.find_element_by_css_selector("#form > div > div.soutu-state-normal > div.soutu-drop > span").click()
result = driver.find_element_by_class_name("upload-text")
print("打印文本", result.text) # 打印文本 本地上传图片
if "打印文本 本地上传图片" in result.text:
print("包含打印文本") # 返回true
sleep(3)
driver.quit()
except Exception as err:
print(err)
print("呼出上传图片成功")
异常定义
项目名/base/Err.py
class RunTimeError(Exception):
"运行失败"
pass
class ElementNotFoundException(Exception):
"元素找不到"
pass
class TimeOutException(Exception):
"超时"
pass
class ArithmeticException(Exception):
"运算错误"
pass
在项目业务代码里就可以这样用
from base import Error #导入根目录Err.py
try:
#需要保护的代码,注意如果保护代码被except截断了,下面对象dirver也是不可识别,所以要完整放在try和except之间
except Exception as err: #这里也可以精准的导入,Exception会包裹住全部的异常信息。
raise Error.TimeOutException("xxxxx") from err
0818作业
对百度进行登陆操作
登陆方式 1.账号密码登陆
根据课堂上学习到{自己填写}的方式 判断是扫码的,还是账号登陆的。
如果是扫码,需要再次使用{自己填写}定位器去跳转。
ps:提交作业账号和密码部分 请用xxx 或者用get_ini_data() 写在ini文件内,这个文件不要发出来就行
2.短信验证 使用input等待输入
iphone_msg =input(“输入短信验证码”) #切换到ide那边输入,回车结束
self.driver.find_element_by_id(“xxxx”).send_keys(Iphone_msg)