元素定位方法
tag_name
link_text
partial_link_text
一、元素定位方法
1.1 tag_name (了解)
说明:是通过元素的标签名称来定位,标签名(查看元素时尖括号(<)紧挨着的单词或字母就是标签名)
(标签名也就是元素名)
方法:driver.find_element_by_tag_name(“标签名”)
注意:
1. 如果页面中存在多个相同标签,默认返回第一个标签元素。
1.2 link_text
说明:定位超链接标签
方法:driver.find_element_by_link_text()
注意:
1. link_text:只能使用精准匹配(a标签的全部文本内容)
1.3 partial_link_text【推荐】
说明:定位超链接标签
方法:driver.find_element_by_partial_link_text()
注意:
1. 可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的关键词
2. 如果有多个值,默认返回第一个值
css定位方法详解
CSS定位
说明:
1. CSS一种标记语言,焦点:数据的样式。控制元素的显示样式,就必须先找到元素,在css标记语言中找元素使用css选择器;
2. css定位就是通过css选择器工具进行定位。
3. 极力推荐使用,查找元素的效率比xpath高,语法比xpath更简单。
方法:
driver.find_element_by_css_selector()
常用测试略:
1. id 选择器
前提:元素是必须有id属性
语法:#id 如:#passwordA
2. class 选择器
前提:元素是必须有class属性
语法:.class 如:.telA
3. 元素选择器
语法:element 如:input
4. 属性选择器
语法:[属性名=属性值]
5. 层级选择器
语法:
1. p>input
2. p input
提示:>与空格的区别,大于号必须为子元素,空格则不用。
扩展:
1. [属性^=‘开头的字母’] # 获取指定属性以指定字母开头的元素
2. [属性$=‘结束的字母’] # 获取指定属性以指定字母结束的元素
3. [属性*=‘包含的字母’] # 获取指定属性包含指定字母的元素
复制xpath:/html/body/form/div/fieldset/p[1]/input
复制最简://*[@id=“userA”]
复制CSS路径:html body form div#zc fieldset p#p1 input#userA
一、元素操作
2.1 方法
1). send_keys() # 输入方法
2). click() # 点击方法
3). clear() # 清空
2.2 提示:
1. 在输入方法之前一定要清空操作。
二、浏览器常用操作API
2.1 方法
1). driver.maximize_window() # 最大化浏览器
2). driver.set_window_size(w, h) # 设置浏览器大小 单位像素
3). driver.set_window_position(x, y) # 设置浏览器位置
4). driver.back() # 后退操作
5). driver.forward() # 前进操作
6). driver.refresh() # 刷新操作
7). driver.close() # 关闭当前主窗口(主窗口:默认启动哪个界面,就是主窗口)
8). driver.quit() # 关闭由driver对象启动的所有窗口
9). driver.title # 获取当前页面title信息
10). drive.current_url # 获取当前页面url信息
2.2 提示:
1. driver.title 和 driver.current_url 没有括号,应用场景:一般为判断上步操作是否执行成功。
2. driver.maximize_window() # 一般为我的前置代码,在获取driver后,直接编写最大化浏览器
3. driver.refresh() 应用场景,在后面的cookie章节会使用到。
4. driver.close()与driver.quit()区别:
close():关闭当前主窗口
quit():关闭由driver对象启动的所有窗口
提示:如果当前只有1个窗口,close与quit没有任何区别。
三、元素信息操作API
3.1 方法:
1). text 获取元素文本 如:driver.text
2). size 获取元素大小 如:driver.size
3). get_attribute 获取元素属性值 如:driver.get_attribute(“id”)
4). is_displayed 判断元素是否可见 如:element.is_displayed()
5). is_enabled 判断元素是否可用 如: element.is_enabled()
6). is_selected 判断元素是否被选中 如:element.is_selected()
3.2 提示:
1. text和size调用时 无括号
2. get_attribute一般应用场景:判断一组元素是否为想要的元素或者判断元素属性值是否正确
3. is_displayed、is_enabled、is_selected,在特殊应用场景中使用。
四、鼠标操作
4.1 为什么使用鼠标操作?
为了满足丰富的html鼠标效果,必须使用对应的方法。
4.2 鼠标事件对应的方法在哪个类中
ActionChains类—>导包 from selenium.webdriver.common.action_chains import ActionChains
4.3 鼠标事件常用的操作方法
1. context_click() # 右击
应用:context_click(element).perform()
2. double_click() # 双击
应用:double_click(element).perform()
3. drag_and_drop() # 拖拽
应用:drag_and_drop(source, target).perform
4. move_to_element() #悬停
应用: move_to_element(element).perform()
5. perform() # 执行以上事件方法
4.4 提示:
1. selenium框架中虽然提供了,右击鼠标方法,但是没有提供选择右击菜单方法,可以通过发送快捷键的方式解决(经测试,谷歌浏览器不支持)。
五、键盘操作
4.1 键盘对应的方法在Keys类中
包:from selenium.webdriver.common.keys import Keys
4.2 常用的快捷键:
CONTROL:Ctrl键
其他,请参考Keys底层定义的常亮
4.3 应用
组合键:element.send_keys(Keys.XXX, ‘a’)
单键:element.send_keys(Keys.XXX)
六、元素等待
6.1 为什么要设置元素等待
由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。
6.2 什么是元素等待
元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。
6.3 元素等待分类
1. 隐式等待
2. 显示等待
6.4 隐式等待
方法:driver.implicitly_wait(30) # 一般情况下设置30秒
特色:
1. 针对所有元素生效。
2. 一般情况下为前置必写代码(1.获取浏览器驱动对象;2. 最大化浏览器;3. 设置隐式等待)
6.5 显示等待
方法:WebDriverWait(driver,timeout=10, poll_frequency=0.5).until(lambda x:x.find_element_by_id(“#user”)).send_keys(“admin”)
参数:
timeout: 超时时间
poll_frequency:访问频率,默认0.5秒找一次元素
x: x为driver,它是WebDriverWait类将传入的driver赋值给类self._driver,until方法调用了self._driver;
提示:
1. WebDriverWait(driver,timeout=10, poll_frequency=0.5).until(lambda x:x.find_element_by_id("#user"))返回的一个元素。
6.6 显示等待与隐式等待区别:
1. 显示等待:针对单个元素生效
2. 隐式等待:针对全局元素生效
selenium截屏代码
应用场景:失败截图,让错误看的更直观
方法:
driver.get_screenshot_as_file(imgepath)
参数:
imagepath:为图片要保存的目录地址及文件名称
如: 当前目录 ./test.png
上一级目录 …/test.png
扩展:
1. 多条用例执行失败,会产生多张图片,可以采用时间戳的形式,进去区分。
操作:
driver.get_screenshot_as_file(“…/image/%s.png”%(time.strftime(“%Y_%m_%d %H_%M_%S”)))
strftime:将时间转为字符串函数
注意:
%Y_%m_%d %H_%M_%S:代表,年 月 日 时 分 秒
# 导包
import time
from time import strftime
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标: 截屏
方法:
driver.get_screenshot_as_file()
需求:
1. 输入用户名
2. 截图 当前目录下 admin.png
"""
# 输入 admin
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 调用截图方法
# driver.get_screenshot_as_file("./admin.png")
# 存放指定目录
# driver.get_screenshot_as_file("../scripts/admin02.png")
# driver.get_screenshot_as_file("../image/admin.png")
# 动态获取文件名称 使用时间戳
# driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%S")))
# driver.get_screenshot_as_file("../image/%s.jpg"%(time.strftime("%Y_%m_%d %H_%M_%S")))
driver.get_screenshot_as_file("../image/%s.jpg"%(strftime("%Y_%m_%d %H_%M_%S")))
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_mouse_drag_and_drop拖拽
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 实例化并获取 ActionChains类
action = ActionChains(driver)
# 获取源元素
source = driver.find_element(By.CSS_SELECTOR,"#div1")
# 获取目标元素
target = driver.find_element(By.CSS_SELECTOR,"#div2")
sleep(2)
action.drag_and_drop(source, target).perform()
# 扩展 通过坐标偏移量执行
# action.drag_and_drop_by_offset(source, xoffset=360, yoffset=180).perform()
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_mouse_扩展选择右键菜单
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# driver = webdriver.Ie()
# 谷歌浏览器不支持 --> 粘贴快捷键
# driver = webdriver.Chrome()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 实例化并获取 ActionChains类
action = ActionChains(driver)
# 定位用户名 在用户名上 右击鼠标 预期:粘贴
# 获取用户名元素 admin123
username = driver.find_element(By.CSS_SELECTOR,"#userA")
# 点击右键
action.context_click(username).perform()
# 发送p
username.send_keys("p")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium切换表单
提示:常用的frame表单有两种:frame、iframe
为什么要切换?
当前主目录内没有iframe表单页面元素信息,不切换,找不到元素。
如何切换?
方法:driver.switch_to.frame(“id\name\element”)
为什么要回到主目录
iframe或frame只有在主目录才有相关元素信息,不回到主目录,切换语句会报错。
如何回到主目录
方法:driver.switch_to.default_content()
提示:
1.切换frame时,可以使用name、id、iframe元素
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
"""
目标: 为什么要切换frame表单
需求:
1. 打开注册实例.html
2. 填写主页面 页面信息
3. 填写注册A 页面信息
4. 填写注册B 页面信息
"""
"""填写主页面"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#user").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#password").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".tel").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#email").send_keys("123@qq.com")
# 切换到注册A 使用name
# driver.switch_to.frame("myframe1")
# 使用id
driver.switch_to.frame("idframe1")
"""填写注册A"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 切换到默认目录
driver.switch_to.default_content()
# 切换到注册B 使用name
# driver.switch_to.frame("myframe2")
# 使用元素切换
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR,"[name='myframe2']"))
"""填写注册B"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#passwordB").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".telB").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#emailB").send_keys("123@qq.com")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium表单切换
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
"""
目标: 为什么要切换frame表单
需求:
1. 打开注册实例.html
2. 填写主页面 页面信息
3. 填写注册A 页面信息
4. 填写注册B 页面信息
"""
"""填写主页面"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#user").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#password").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".tel").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#email").send_keys("123@qq.com")
# 切换到注册A 使用name
# driver.switch_to.frame("myframe1")
# 使用id
driver.switch_to.frame("idframe1")
"""填写注册A"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 切换到默认目录
driver.switch_to.default_content()
# 切换到注册B 使用name
# driver.switch_to.frame("myframe2")
# 使用元素切换
driver.switch_to.frame(driver.find_element(By.CSS_SELECTOR,"[name='myframe2']"))
"""填写注册B"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#userB").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#passwordB").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".telB").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#emailB").send_keys("123@qq.com")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_定位输入框并输入值_CLASS_NAME
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\tpshop\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 查找电话 输入 18611111111
driver.find_element(By.CLASS_NAME,"telA").send_keys("18611111111")
# 暂停3秒
sleep(3)
# 关闭浏览器
driver.quit()
selenium隐式等待和显式等待
元素等待
为什么要设置元素等待
由于电脑配置或网络原因,在查找元素时,元素代码未在第一时间内被加载出来,而抛出未找到元素异常。
什么是元素等待
元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找打元素,抛出未找到元素异常。
元素等待分类
1. 隐式等待
2. 显示等待
3. 隐式等待
方法:driver.implicitly_wait(30) # 一般情况下设置30秒
特色:
1. 针对所有元素生效。
2. 一般情况下为前置必写代码(1.获取浏览器驱动对象;2. 最大化浏览器;3. 设置隐式等待)
显示等待
方法:WebDriverWait(driver,timeout=10, poll_frequency=0.5).until(lambda x:x.find_element_by_id(“#user”)).send_keys(“admin”)
参数:
timeout: 超时时间
poll_frequency:访问频率,默认0.5秒找一次元素
x: x为driver,它是WebDriverWait类将传入的driver赋值给类self._driver,until方法调用了self._driver;
提示:
1. WebDriverWait(driver,timeout=10, poll_frequency=0.5).until(lambda x:x.find_element_by_id("#user"))返回的一个元素。
显示等待与隐式等待区别:
1. 显示等待:针对单个元素生效
2. 隐式等待:针对全局元素生效
selenium使用Select类实现操作option选项
"""
需求:
1. 使用css id选择器 定位用户名 输入admin
2. 使用css 属性选择 定位密码框 输入123456
3. 使用 css class 选择器 定位电话号码: 18611112222
4. 使用css 元素选择器 定位span标签获取文本值
5. 使用层级选择器 定位email 输入 123@qq.com
方法:
driver.find_element_by_css_selector()
获取文本的方法 元素.text
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开 注册A.html
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 1. 使用css id选择器 定位用户名 输入admin
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 2. 使用css 属性选择 定位密码框 输入123456
driver.find_element(By.CSS_SELECTOR,"[name='passwordA']").send_keys("123456")
# 3. 使用 css class 选择器 定位电话号码: 18611112222
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611112222")
# 4. 使用css 元素选择器 定位span标签获取文本值
span = driver.find_element(By.CSS_SELECTOR,"span").text
print("获取的span标签文本值:", span)
# 5. 使用层级选择器 定位email 输入 123@qq.com
driver.find_element(By.CSS_SELECTOR,"p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
selenium_最大化、位置、大小、前进后退
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 将浏览器 最大化
driver.maximize_window()
# 暂停2秒
sleep(2)
# 设置固定大小 300,200
driver.set_window_size(300, 200)
# 暂停2秒
sleep(2)
# 移动浏览器窗口位置 x:320,y:150
driver.set_window_position(320, 150)
# 暂停2秒
sleep(2)
# 最大化
driver.maximize_window()
sleep(1)
# 点击 访问新浪网站 注意:要演示后退功能,必须先执行打开新的网站
driver.find_element(By.LINK_TEXT,"访问 新浪 网站").click()
# 暂停2秒
sleep(2)
# 执行后退 ---> 注册A.html
driver.back()
# 暂停2秒
sleep(2)
# 执行前进 -->新浪 注意:前进必须放到后退操后执行
driver.forward()
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium拖动滚动条
为什么要操作滚动条
在web自动化中有些特殊场景,如:滚动条拉倒最底层,指定按钮才可用。
如何操作
第一步:设置操作滚动条操作语句
如:js = “window.scrollTo(0,10000)”
0: 左边距 --》水平滚动条
10000:上边距 -->垂直滚动条
第二步:调用执行js方法,将设置js语句传入方法中
方法:driver.execute_script(js)
在selenium中没有直接提供定位滚动条组件方法,但是它提供了执行js语句方法,可以通过js语句来控制滚动条操作。
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标:滚动条操作
需求:
1. 启动暂停2秒
2. 滚动条拉倒最底下
"""
sleep(2)
# 第一步 设置js控制滚动条语句
js = "window.scrollTo(0, 10000)"
# 第二步 调用执行js语句方法
driver.execute_script(js)
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium鼠标操作大全
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标:基于selenium完成 鼠标事件操作
说明:
1. selenium框架中将鼠标操作的一系列方法封装在 ActionChains类中
方法:
1. 双击 double_click()
2. 右击 context_click()
3. 悬停 move_to_element()
4. 拖拽 drag_and_drop()
5. 执行 perform()
操作:
1. 导入 ActionChains类 位置:from selenium.webdriver.common.action_chains import ActionChains
2. 实例化
匿名:ActionChains(driver).double_click(element).perform()
匿名:ActionChains(driver).context_click(element).perform()
实名:action = ActionChains(driver)
3. 调用响应的方法:
如:
1. ActionChains(driver).double_click(element).perform()
2. action.double_click(element).perform()
注意:
鼠标操作方法,必须调用perform()才能执行
"""
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium截图_get_screenshot_as_file
# 导包
import time
from time import strftime
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标: 截屏
方法:
driver.get_screenshot_as_file()
需求:
1. 输入用户名
2. 截图 当前目录下 admin.png
"""
# 输入 admin
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 调用截图方法
# driver.get_screenshot_as_file("./admin.png")
# 存放指定目录
# driver.get_screenshot_as_file("../scripts/admin02.png")
# driver.get_screenshot_as_file("../image/admin.png")
# 动态获取文件名称 使用时间戳
# driver.get_screenshot_as_file("../image/%s.png"%(time.strftime("%Y_%m_%d %H_%M_%S")))
# driver.get_screenshot_as_file("../image/%s.jpg"%(time.strftime("%Y_%m_%d %H_%M_%S")))
driver.get_screenshot_as_file("../image/%s.jpg"%(strftime("%Y_%m_%d %H_%M_%S")))
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium浏览器常用操作
浏览器常用操作API
2.1 方法
1). driver.maximize_window() # 最大化浏览器
2). driver.set_window_size(w, h) # 设置浏览器大小 单位像素
3). driver.set_window_position(x, y) # 设置浏览器位置
4). driver.back() # 后退操作
5). driver.forward() # 前进操作
6). driver.refresh() # 刷新操作
7). driver.close() # 关闭当前主窗口(主窗口:默认启动哪个界面,就是主窗口)
8). driver.quit() # 关闭由driver对象启动的所有窗口
9). driver.title # 获取当前页面title信息
10). drive.current_url # 获取当前页面url信息
2.2 提示:
1. driver.title 和 driver.current_url 没有括号,应用场景:一般为判断上步操作是否执行成功。
2. driver.maximize_window() # 一般为我的前置代码,在获取driver后,直接编写最大化浏览器
3. driver.refresh() 应用场景,在后面的cookie章节会使用到。
4. driver.close()与driver.quit()区别:
close():关闭当前主窗口
quit():关闭由driver对象启动的所有窗口
提示:如果当前只有1个窗口,close与quit没有任何区别。
selenium_鼠标_点击、移动、输入
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 实例化并获取 ActionChains类
action = ActionChains(driver)
# 定位用户名 在用户名上 右击鼠标 预期:粘贴
# 获取用户名元素
username = driver.find_element(By.CSS_SELECTOR,"#userA")
# 调用右击方法
ActionChains(driver).context_click(username).perform()
username.send_keys(Keys.ALT)
sleep(2)
# 发送用户名 admin 并进行双击 预期:选中admin
pwd = driver.find_element(By.CSS_SELECTOR,"#passwordA")
pwd.send_keys("admin")
ActionChains(driver).double_click(pwd).perform()
sleep(2)
# 移动到注册按钮上 预期:按钮变色 出现 加入会员A
ActionChains(driver).move_to_element(driver.find_element(By.CSS_SELECTOR,"button")).perform()
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium软件测试验证码处理
验证码
什么是验证码?
一种随机生成信息(文字、数字、图片)
验证码作用
防止恶意请求
验证码处理方式
1. 去掉验证码(项目在测试环境、公司自己的项目)
2. 设置万能验证码(测试环境或线上环境,公司自己项目)
3. 使用验证码识别技术 (由于现在的验证码千奇百怪,导致识别率太低)
4. 使用cookie解决(推荐)
cookie 介绍:
生成:由服务器生成
作用:标识一次对话的状态(登录的状态)
使用:浏览器自动记录cookie,在下一条请求时将cookis信息自动附加请求
应用:
方法:
1. driver.get_cookies() # 获取所有的cookie
2. driver.add_cookies({字典}) # 设置cookie
步骤:
1. 打开百度url driver.get(“http://www.baidu.com”)
2. 设置cookie信息: driver.add_cookie({“name”:“BDUSS”,“value”:“根据实际情况编写”})
3. 暂停2秒以上
4. 刷新操作
注意:
6. 以上百度BDUSS所需格式为百度网站特有,别的网站请自行测试。
7. 必须进行刷新操作。
selenium操作选择框CSS_SELECTOR
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标: 默认北京A
暂停2秒
1. 定位 A上海
2. 暂停2秒
3. 定位 A广州
"""
"""方式1:使用CSS定位"""
sleep(2)
# 使用css定位来操作 A上海
driver.find_element(By.CSS_SELECTOR,"[value='sh']").click()
sleep(2)
# 使用css定位 A广州
driver.find_element(By.CSS_SELECTOR,"[value='gz']").click()
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_元素常用信息操作方法
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 将浏览器 最大化
# driver.maximize_window()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 获取用户名文本框大小
size = driver.find_element(By.CSS_SELECTOR,"#user").size
print("用户名大小为:", size)
# 获取页面上第一个超文本连接内容
text = driver.find_element(By.CSS_SELECTOR,"a").text
print("页面中第一个a标签为:", text)
# 获取页面上第一个超文本链接地址 get_attribute("href")
att = driver.find_element(By.CSS_SELECTOR,"a").get_attribute("href")
print("页面中第一个a标签为href属性值为:", att)
# 判断 span元素是否可见
display = driver.find_element(By.CSS_SELECTOR,"span").is_displayed()
print("span元素是否可见:", display)
# 判断 取消按钮是否可用
enabled = driver.find_element(By.CSS_SELECTOR,"#cancel").is_enabled()
print("取消按钮是否可用:", enabled)
# 选中旅游按钮
driver.find_element(By.CSS_SELECTOR,"#ly").click()
# 判断旅游是否被选中
selected = driver.find_element(By.CSS_SELECTOR,"#ly").is_selected()
print("旅游是否被选中:", selected)
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium多窗口切换
为什么要切换多窗口?
页面存在多个窗口式,seleniu默认焦点只会在主窗口上所有的元素,不切换切换窗口,无法操作除主窗口以外的窗口内元素
如何切换?
思路:获取要切换的窗口句柄,调用切换方法进行切换。
方法:
1. driver.current_window_handle # 获取当前主窗口句柄
2. driver.window_handles # 获取当前由driver启动所有窗口句柄
3. driver.switch_to.window(handle) # 切换窗口
步骤:
1. 获取当前窗口句柄
2. 点击链接 启动另一个窗口
3. 获取当前所有窗口句柄
4. 遍历所有窗口句柄
5. 判断当前遍历的窗口句柄不等于当前窗口句柄
6. 切换窗口操作
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
"""
目标: 切换窗口
需求:
1. 打开注册实例.html
2. 点击 注册A网页
3. 填写 注册A网页 内容
"""
# 获取当前窗口句柄 -->目的:判断只要不是当前主窗口句柄,就一定时新开的窗口句柄
current_handle = driver.current_window_handle
print("当前窗口句柄为:", current_handle)
# 点击注册A网页
driver.find_element(By.PARTIAL_LINK_TEXT,"A网页").click()
# 获取所有窗口句柄
handles = driver.window_handles
print("所有窗口句柄:", handles)
# 判断 不是 当前窗口句柄
for h in handles:
if h != current_handle:
# 切换
driver.switch_to.window(h)
"""填写注册A"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_定位tag_name
"""
需求:
1. 使用tag_name定位方式,使用注册A.html页面,用户名输入admin
方法:
1. driver.find_element_by_tag_name("") # 定位元素方法
2. send_keys() # 输入方法
3. driver.quit() # 退出方法
"""
# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 获取 浏览器驱动对象
driver = webdriver.Edge()
# 打开 注册A.html
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用tag_name定位用户名 并 输入admin
# 注意:页面中如果存在多个相同的标签名,默认返回第一个标签
driver.find_element(By.TAG_NAME,"input").send_keys("admin")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
selenium显示等待
确保页面元素在特定条件下加载完毕后再执行后续操作。显示等待可以通过WebDriverWait类和ExpectedConditions类来实现。通过使用显示等待,可以避免在页面元素还未加载完毕时就进行操作,从而提高测试的稳定性和可靠性。
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Edge()
driver.maximize_window()
# 设置元素等待 隐式等待 重要重要重要!!!
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标:显示等待使用
操作:
1. 导包 WebDriverWait()类
2. 实例化WebDriverWait()类并调用until(method)方法
method:匿名函数
lambda x:x.find_element_by_id()
需求:
定位用户名输入admin
"""
# 实例化WebDriverWait()并调用until方法
# 注意:调用until方法返回的一定是一个元素
WebDriverWait(driver, timeout=10, poll_frequency=0.5).until(lambda x:x.find_element(By.ID,"#user")).send_keys("admin")
# 注意:此时username还不是元素,只有代码运行起来才是元素
# username.send_keys("admin")
# 写法2
# 获取 WebDriverWait示例对象
wait= WebDriverWait(driver,timeout=10, poll_frequency=0.5)
# 获取元素
username = wait.until(lambda x:x.find_element_by_id("#user"))
# 发送内容
username.send_keys("admin")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium多窗口切换与选择
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
# driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册实例.html"
driver.get(url)
"""
目标: 切换窗口
需求:
1. 打开注册实例.html
2. 点击 注册A网页
3. 填写 注册A网页 内容
"""
# 获取当前窗口句柄 -->目的:判断只要不是当前主窗口句柄,就一定时新开的窗口句柄
current_handle = driver.current_window_handle
print("当前窗口句柄为:", current_handle)
# 点击注册A网页
driver.find_element(By.PARTIAL_LINK_TEXT,"A网页").click()
# 获取所有窗口句柄
handles = driver.window_handles
print("所有窗口句柄:", handles)
# 判断 不是 当前窗口句柄
for h in handles:
if h != current_handle:
# 切换
driver.switch_to.window(h)
"""填写注册A"""
# 用户名
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 密码
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("admin")
# 电话
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611112222")
# 邮件
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_alert_处理
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
需求:
1. 点击 alert按钮
2. 输入用户名 admin
"""
# 定位 alert按钮 并 点击
driver.find_element(By.CSS_SELECTOR,"#alerta").click()
# 切换 到alert
# 默认返回的alert对话框对象
at = driver.switch_to.alert
# 处理 对话框
# 同意
at.accept()
# 获取文本
# print("警告信息:", at.text)
# 取消
# at.dismiss()
# 定位 用户名 输入admin
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_使用XPATH定位
"""
需求:
1. 使用绝对路径定位 用户名 输入 admin
2. 暂停2秒钟
3. 使用相对路径定位 密码框 输入 123
方法:
driver.find_element_by_xpath()
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开 注册A.html
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用绝对路径定位 用户名 admin
# driver.find_element_by_xpath("/html/body/form/div/fieldset/p[1]/input").send_keys("admin")
# 使用层级结合属性 定位用户名:
driver.find_element(By.XPATH,"//p[@id='p1']/input").send_keys("admin")
# 暂停2秒
sleep(2)
# 使用相对路径 定位 密码 123
# driver.find_element_by_xpath("//input[@id='passwordA']").send_keys("123")
# 使用逻辑结合
driver.find_element(By.XPATH,"//input[@id='passwordA' and @placeholder='密码A']").send_keys("123")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
selenium隐式等待
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 设置元素等待 隐式等待 重要重要重要!!!
# 设置隐式等待10秒。
driver.implicitly_wait(10)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标:隐式等待使用
"""
# 给一个错误的id,不能知道,如果直接抛出异常,说明等待失效。如果在设置指定时长以外抛出说明等待生效。
driver.find_element(By.CSS_SELECTOR,"#user").send_keys("admin")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_实现复制粘贴
# 导包
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
# 获取浏览器驱动对象
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标:学习使用基于selenium完成键盘操作
案例:
1. 输入用户名admin1
2. 删除 1
3. 全选 用户名 "admin" Ctrl+A
4. 复制 admin Ctrl+C
5. 粘贴 将复制的admin粘贴到密码框
分析:
1. 导包 Keys
2. 调用 send_keys(Keys.XXX,'a')
"""
# 定位 用户名
username = driver.find_element(By.CSS_SELECTOR,"#userA")
# 输入 admin1
username.send_keys("admin1")
sleep(2)
# 删除1
username.send_keys(Keys.BACK_SPACE)
sleep(2)
# 全选 admin Ctrl+a
username.send_keys(Keys.CONTROL, "a")
sleep(2)
# 复制 Ctrl+c
username.send_keys(Keys.CONTROL, "c")
sleep(2)
# 定位密码框 并执行 Ctrl+v
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys(Keys.CONTROL, "v")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_清空输入框的内容
driver.find_element(By.CSS_SELECTOR,“.telA”).clear()
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 输入 admin
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 输入 密码 123456
driver.find_element(By.CSS_SELECTOR,"#passwordA").send_keys("123456")
# 输入 电话 18611112222
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18611112222")
# 输入 邮箱 123@qq.com
driver.find_element(By.CSS_SELECTOR,"#emailA").send_keys("123@qq.com")
# 暂停2秒
sleep(2)
# 修改电话号码 18622223333 -->清空操作
driver.find_element(By.CSS_SELECTOR,".telA").clear()
driver.find_element(By.CSS_SELECTOR,".telA").send_keys("18622223333")
# 暂停2秒
sleep(2)
# 点击注册按钮
driver.find_element(By.CSS_SELECTOR,"button").click()
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_定位link_text
"""
需求:
1. 使用link_text定位方式,使用注册A.html页面,点击 访问 新浪 网站 连接地址
方法:
1. driver.find_element_by_link_text("") # 定位元素方法
2. click() # 点击方法
注意:
link_text:
1. 只能定位a标签
2. link_text定位元素的内容必须为全部匹配
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开 注册A.html
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用 link_text定位 访问 新浪 网站 <全部匹配>
driver.find_element(By.LINK_TEXT,"访问 新浪 网站").click()
# 错误写法,没有全部匹配文本
# driver.find_element_by_link_text("访问").click()
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
selenium_定位输入框并输入值_id
from time import sleep
from selenium import webdriver
# 获取浏览器对象
driver = webdriver.Edge()
# 打开 url
url = r"C:\Users\黄永生\Desktop\软件测试\tpshop\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 查找元素 用户名 并 输入admin
driver.find_element("id","userA").send_keys("admin")
# 查找元素 密码框 并 输入123456
driver.find_element("id","passwordA").send_keys("123456")
# 暂停3秒
sleep(3)
# 关闭浏览器驱动对象
driver.quit()
selenium_定位By.PARTIAL_LINK_TEXT
"""
需求:
1. 使用partial_link_text定位方式,使用注册A.html页面,点击 访问 新浪 网站 连接地址
方法:
1. driver.find_element_by_partial_link_text("") # 定位元素方法
2. click() # 点击方法
注意:
partial_link_text:
1. 只能定位a标签
2. partial_link_text定位元素的内容可以模糊部分值,但是必须能代表唯一性
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开 注册A.html
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 使用partial_link_text定位 使用模糊 唯一代表关键词
# driver.find_element(By.PARTIAL_LINK_TEXT,"访问").click()
# 没有使用唯一代表词 默认操作符合条件的第一个元素
# driver.find_element(By.PARTIAL_LINK_TEXT,"新浪").click()
# 使用全部匹配
driver.find_element(By.PARTIAL_LINK_TEXT,"访问 新浪 网站").click()
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
selenium拉动滚动条
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
driver = webdriver.Edge()
# 最大化浏览器
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(30)
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
"""
目标:滚动条操作
需求:
1. 启动暂停2秒
2. 滚动条拉倒最底下
"""
sleep(2)
# 第一步 设置js控制滚动条语句
js = "window.scrollTo(0, 10000)"
# 第二步 调用执行js语句方法
driver.execute_script(js)
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_使用正则表达式定位_css_selector
"""
需求:
1. 使用css id选择器 定位用户名 输入admin
2. 使用css 属性选择 定位密码框 输入123456
3. 使用 css class 选择器 定位电话号码: 18611112222
4. 使用css 元素选择器 定位span标签获取文本值
5. 使用层级选择器 定位email 输入 123@qq.com
方法:
driver.find_element_by_css_selector()
获取文本的方法 元素.text
"""
# 导包
from selenium import webdriver
from time import sleep
# 获取 浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开 注册A.html
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 1. 使用css id选择器 定位用户名 输入admin 以指定字母开头 语法:[属性^='开头的字母']
driver.find_element(By.CSS_SELECTOR,"[name^='us']").send_keys("admin")
# 2. 使用css 属性选择 定位密码框 输入123456 以指定字母结束 语法:[属性$='结束的字母']
driver.find_element(By.CSS_SELECTOR,"[name$='dA']").send_keys("123456")
# 3. 使用 css class 选择器 定位电话号码: 18611112222 包含指定字母 语法:[属性*='包含字母']
driver.find_element(By.CSS_SELECTOR,"[class*='el']").send_keys("18611112222")
# 4. 使用css 元素选择器 定位span标签获取文本值
span = driver.find_element(By.CSS_SELECTOR,"span").text
print("获取的span标签文本值:", span)
# 5. 使用层级选择器 定位email 输入 123@qq.com
driver.find_element(By.CSS_SELECTOR,"p>input[placeholder='电子邮箱A']").send_keys("123@qq.com")
# 暂停 3秒
sleep(3)
# 退出浏览器驱动
driver.quit()
selenium上传文件
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 错误的实现
# driver.find_element_by_css_selector("[name='upfilea']").click()
# 正确实现,使用 send_keys("文件路径及文件名")
driver.find_element(By.CSS_SELECTOR,"[name='upfilea']").send_keys("D:\hello123.txt")
# 暂停 2
sleep(2)
# 关闭驱动对象
driver.quit()
selenium_refresh、close、quit、title、current_rul
# 导包
from selenium import webdriver
from time import sleep
# 获取浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Edge()
# 将浏览器 最大化
# driver.maximize_window()
# 打开url
url = r"C:\Users\黄永生\Desktop\软件测试\P2C电子市场\web自动化_day01_课件+笔记+资料+代码\02_其他资料\注册A.html"
driver.get(url)
# 用户名输入 admin 目的:刷新完成--清空
driver.find_element(By.CSS_SELECTOR,"#userA").send_keys("admin")
# 暂停2秒
sleep(2)
# 刷新
driver.refresh()
# 获取title
title = driver.title
print("当前页面title为:", title)
# 获取当前url
current_rul = driver.current_url
print("当前页面url地址为:", current_rul)
# 点击 新浪 打开新窗口
driver.find_element(By.LINK_TEXT,"访问 新浪 网站").click()
# 暂停 3秒
sleep(3)
# 关闭主窗口
driver.close()