web自动化--selenium--常用API(续)

本文介绍了使用Selenium进行Web自动化测试时如何操作文件上传与下载,包括火狐和谷歌浏览器的配置。同时,详细讲解了处理Cookie的方法,包括获取、添加、删除。此外,还讨论了验证码的处理策略以及元素等待的两种方式:隐式等待和显式等待。最后,提到了EC模块中的expected_conditions用于断言的实用功能。
摘要由CSDN通过智能技术生成

一.上传文件

    1.定位下载文件的按钮元素
    2.使用 send_keys(文件路径) 来上传文件


# 定位上传文件的按钮
ele = driver.find_element_by_name('upfilea')

# 使用send_keys上传文件
ele.send_keys(r'E:\310记录.md')

二.下载文件

1.下载文件--火狐

配置火狐浏览器的首选项---下载相关的首选项

fp = webdriver.FirefoxProfile()

# browser.download.folderList 设置成2表示使用自定义的路径,0下载到桌面,1使用默认地址
fp.set_preference("browser.download.folderList",2)

# browser.download.manager.showWhenStarting 是否显示开始下载
# True表示显示,False表示不显示
fp.set_preference("browser.download.manager.showWhenStarting",False)

# 设置自定义下载的路径
fp.set_preference("browser.download.dir",'d:\\')

# 是否需要弹窗询问
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")

driver = webdriver.Firefox(firefox_profile=fp)

driver.get('https://pypi.org/project/selenium/#files')

driver.find_element_by_partial_link_text('selenium-4.9.1').click()

2.下载文件--谷歌

配置谷歌浏览器的首选项---下载相关的首选项

from selenium import webdriver

# download.default_directory 配置下载路径
# profile.default_content_settings.popups 取消弹窗询问
pres = {
    "download.default_directory": "D://",
    "profile.default_content_settings.popups": 0
       }

options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', pres)

#实例化驱动
driver = webdriver.Chrome(options=options)

#打开网址
driver.get('https://pypi.org/project/selenium/#files')

#下载
driver.find_element_by_partial_link_text('selenium-4.9.1').click()

三.cookie

概念
    cookies

    网页上怎么去查看cookies
        1.打开F12--点击Application
        2.在左侧选择 cookies

语法
    获取所有的cookie
        driver.get_cookies()

    获取指定name的cookie
        driver.get_cookie(name)

    添加一条cookie:
        cookie_dict = {
            "name": name值,
            "value": value值
                                }
        driver.add_cookie(cookie_dict)

    删除一条cookie
        driver.delete_cookie(name)

    删除所有的cookie
        driver.delete_all_cookies()

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

# 获取所有的cookies
print(driver.get_cookies())

# 获取其中某一条
print(driver.get_cookie("BAIDUID_BFESS"))

# 添加cookie
cookie_dict = {
    "name": "TestBaidu",
    "value": "0x12222222222222222222222222222222222222222"
}
driver.add_cookie(cookie_dict)

print(driver.get_cookies())

print('=' * 100)
# 删除其中某一个cookie
driver.delete_cookie('TestBaidu')

print(driver.get_cookies())

print('=' * 100)

# 删除所有的cookie
driver.delete_all_cookies()
print(driver.get_cookies())

四.验证码处理

概念
    验证码处理方案:
        1.在测试环境去掉验证码---需要开发配合
        2.设置万能码---程序后门
        3.图片验证码识别技术 Python-tesseract ---不建议的方式,不稳定
        4.cookie伪装---实际项目中不确定就问前端开发

import time

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('http://www.baidu.com')

# 伪装了已经登录的cookie
cookie_list = [
    {"name": "BDUSS",
     "value": "pJd3NZM0xMZXpZVW9Uck9ULVNQSTlublRNLXhJTkNwM0NNaH5iQ21HUk5CSlZrSVFBQUFBJCQAAAAAAAAAAAEAAAAPcn9Rt-i~8bXE0cC44Nfw1d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13bWRNd21kYl"},
    {"name": "BDUSS_BFESS",
     "value": "pJd3NZM0xMZXpZVW9Uck9ULVNQSTlublRNLXhJTkNwM0NNaH5iQ21HUk5CSlZrSVFBQUFBJCQAAAAAAAAAAAEAAAAPcn9Rt-i~8bXE0cC44Nfw1d8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE13bWRNd21kYl"}
]

# 把cookie添加到原本的cookies里面
for cookie in cookie_list:
    driver.add_cookie(cookie)

time.sleep(5)

# 刷新浏览器
driver.refresh()

五.元素等待

    强制等待:time.sleep(秒数)     无论元素是否加载完毕,都要等这么久

    隐式等待:driver.implicitly_wait(10)
        等待页面元素加载完毕,最多等10秒钟时间,往下执行查找元素
        如果页面所有元素在 3 秒加载完毕,那么就只等待3秒钟

        缺点:

           1.需要等待整个页面加载完毕之后才会往下执行,
              但是存在页面还未加载完毕,想要操作的元素已经加载完毕,因此会浪费等待时间

            2.超过等待时间之后,如果页面还未加载完毕,接着往下执行
              有可能存在元素找不到的问题

        优点:

                针对driver的整个周期有效,只需要设置一次

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# time.sleep(10)

# 等待页面元素加载完毕,最多等10秒钟时间
# 如果页面所有元素在 3 秒加载完毕,那么就只等待3秒钟
driver.implicitly_wait(10)


driver.find_element_by_id('kw').send_keys('test')

显示等待:
        from selenium.webdriver.support.wait import WebDriverWait
        WebDriverWait
            WebDriverWait(driver,超时时间,检测频率,忽略异常)

            查找某个元素,一直查找10秒钟,每个0.5秒检测一次,存在则返回元素,不存在抛出TimeoutException的异常
            其中until方法的message参数是可选抛出异常信息的参数
            element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"),message="报错信息")

                实现逻辑分析:
                    1.WebDriverWait(driver, 10)实例化一个显式等待类
                    2.调用until方法,把匿名函数传给 method 参数
                    3.method 参数使用 method(self._driver)来达到查找元素的功能

from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# element = driver.find_element_by_id('kw')
# element.send_keys("源码时代")

#  lambda 形式参数 : 代码表达式
# 变量 = lambda 形式参数 : 代码表达式
# 变量(实际参数)
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id('kw'), "输入框没有找到")
element.send_keys("源码时代")

time.sleep(5)
driver.quit()

六. EC模块

1.call魔法方法

        __call__
                执行时机:直接执行对象的时候 如:对象()  就会直接调用执行 __call__方法
                作用:把对象当做是一个函数来进行调用

#call方法实例
class Student(object):

    def __init__(self, name):
        print("实例化的时候执行__init__方法")
        self.name = name

    def __call__(self, *args, **kwargs):
        print("执行__call__方法")
        print(args)
        print(self.name)
        return self.name

    def add(self, num1, num2):
        print(num1 + num2)


# stu1 = Student("张三")
# stu1(1, 2, 3, 4, 5)
# stu1.add(1, 2)

Student("张三")(1, 2, 3, 4, 5)   #直接调用call方法

2. EC模块: expected_conditions 一般使用时候会通过 as 取别名为 EC
           EC模块实际上就是selenium官方封装的一些用来 断言 的方法
                断言:判断预期结果和实际结果是否相符合

        EC.title_is("百度一下,你就知道")(driver)
        EC.title_contains("百度一下")(driver)

from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

print(driver.title)

print(EC.title_is("百度一下,你就知道")(driver))

print(EC.title_contains("百度一下")(driver))


locator = ("id", "kw")
"""
locator可以用的方法如下:
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
"""
ele = EC.presence_of_element_located(locator=locator)(driver)
ele.send_keys("test")

七.EC模块和显式等待相结合


locator = ("id", "kw")
# EC和显示等待结合使用
ele = WebDriverWait(driver, 10).until(EC.presence_of_element_located(locator), message='输入框找不到')
ele.send_keys("源码时代")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值