线上第六期_selenium 基础课 结合_0818

学习建议

python基本语法掌握,读写文件,for,while条件表达式 体现在编程思维
函数面对对象拼接 对象类型衔接和对象是否需要有return
对于网页自动化业务的理解 -体现在具象化设计
定位器如何选型
webdriver APi应用 -体现在业务理解

学习资料

  • 面向对象类学习 注释很详细。
  • python电子书 这本书教你的是python3特性。虽然项目已经用python3实现了,但是没有使用到3特性所带来的便捷。

补充业务理解

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)