自动化测试---selenium

本文介绍了使用Selenium进行Web自动化测试的一些关键操作,包括文件上传、下载的设置,处理cookie,验证码的策略,以及元素等待的各种方法,如隐式等待、显示等待,并展示了如何结合EC模块进行更精确的元素定位和等待。

目录

 一.上传文件

二.下载文件

三.cookie相关操作

四.验证码

五.元素等待

六.EC模块

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


 一.上传文件

1.定位下载文件的按钮元素

2.使用send_keys(文件路径)来上传文件

例:

# 导入模块
import time
from selenium import webdriver

# 实例化浏览器对象
driver = webdriver.Chrome()

# 通过get打开网页
driver.get('file:///E:/310%E6%B5%8B%E8%AF%95%E7%B2%BE%E8%8B%B1%E7%8F%AD/10web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/2023-05-24web%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95day04/resources/%E7%BB%83%E4%B9%A0%E9%A1%B5%E9%9D%A2/%E6%B3%A8%E5%86%8CA.html')

# 最大化浏览器
driver.maximize_window()

# 下拉
js = 'window.scrollTo(0,1000)'
driver.execute_script(js)


#上传文件

#定位到上传文件按钮(不能点击)
ele=driver.find_element_by_name('upfilea')


#上传文件路径
ele.send_keys(r'D:\Program Files (x86)\课件1111\10web自动化测试\2023-05-22web自动化测试day03\doc\简历.md')

time.sleep(5)
driver.quit()

二.下载文件

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

https://github.com/mozilla/geckodriver/issues/236

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

1.from selenium import webdriver  
2.import time  
3.options = webdriver.ChromeOptions()  
4.# 设置进制弹出窗口和下载路径  
5.prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}  
6.#添加配置项  
7.options.add_experimental_option('prefs', prefs)  
8.driver = webdriver.Chrome(chrome_options=options)  
9.driver.get('http://pypi.python.org/pypi/selenium')  
10.time.sleep(3)  
11.# 点击到selenium下载文件的页面  
12.driver.find_element_by_css_selector("#files-tab").click()  
13.time.sleep(2)  
14.# 点击下载whl文件的元素  
15.driver.find_element_by_partial_link_text("selenium-4.3.0").click()  
16.time.sleep(3)  
17.# driver.quit()  

三.cookie相关操作

网页查看cookie的方法:1.打开网页按f12---点击APPlication

                                     2.在左侧选择cookie

语法:

1.获取所有cookie

driver.get_cookies()

2.获取某一条

driver.get_cookie(name值)

3.添加cookie

#形成一个字典 
cookie_dict = {
            "name": name值,
            "value": value值
        }


driver.add_cookie(cookie_dict)

4.删除一条cookie

driver.delete_cookie(name值)

5.删除所有cookie

driver.delete_all_cookies()

四.验证码

验证码处理方案:1.在测试环境去掉验证码

                          2.设置万能验证码

                          3.图片验证码识别技术(不建议使用)

                          4.cookie伪装

重点讲解cookie伪装:

伪装已经登录的cookie,把name和值加入进去实现登录

import time

from selenium import webdriver

driver = webdriver.Chrome()

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

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

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

time.sleep(5)

# 刷新浏览器
driver.refresh()

time.sleep(10)

driver.quit()

五.元素等待

1.强制等待(无论元素是否加载完毕,都要等这么久)

import time
time.sleep(秒数)     

2.隐式等待

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

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

3.显示等待(针对driver的整个周期有效,只需要设置一次)

# 1.导包
from selenium.webdriver.support.wait import WebDriverWait
# 实例化
element=WebDriverWait(driver,10).until(lambda x:x.find_element_by_id('kw'),message='元素加载超时')
element.send_keys('内容')
实现逻辑分析:
    1.WebDriverWait(driver, 10)实例化一个显式等待类
    2.调用until方法,把匿名函数传给 method 参数
    3.method 参数使用 method(self._driver)来达到查找元素的功能

六.EC模块

在此之前先了解__call__(魔法方法)

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

EC模块定义:expected_conditions 一般使用时候会通过 as 取别名为 EC

EC模块实际上就是selenium官方封装的一些用来断言的方法

断言:判断预期结果和实际结果是否相符合

例1:

from selenium.webdriver.support import expected_conditions as EC


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

例2:

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


locator = ("id", "kw")

ele = EC.presence_of_element_located(locator=locator)(driver)
ele.send_keys("百度一下")



time.sleep(10)
driver.quit()

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

 例:

import time
from selenium import webdriver
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')

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

time.sleep(10)
driver.quit()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值