自动化测试-第二天

第二天

webdriver API
自动化测试的主要步骤
1.通过某些方式找到我们要执行的对象,目标(Target)
2.对这个对象进行什么操作(command)
3.通过操作对定位到的元素赋值(value)
4.添加断言操作
页面元素定位、操作

1.什么是页面元素

在浏览器上能显示的所有要素,如图片,文本框,下拉列表等都是页面元素

2.webdriver提供的元素定位方式

元素的获取方式是通过浏览器的f12进行定位寻找,有时有些元素在html是没有的
webDriver元素定位方式对应的python方法
id(html中的id属性)find_element_by_id()
namefind_element_by_name()
class namefind_element_by_class_name()
tag namefind_element_by_tag_name()
link textfind_element_by_link_text()
partial link textfind_element_by_partial_link_text()
xpathfind_element_by_xpath()
css selectorfind_element_by_css_selector()

(1)通过id元素定位

from selenium import webdriver

import time
# 使用id属性定位

# 创建谷歌浏览器对象
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("hahah")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()

(2)根据name元素定位

from selenium import webdriver

import time
# 使用name属性定位

# 创建谷歌浏览器对象
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_name("wd").send_keys("assss")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()

(3)link text元素定位

from selenium import webdriver

import time
# 使用link text属性定位

# 创建谷歌浏览器对象
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_link_text("新闻").click()
time.sleep(2)
driver.quit()

(4)xpath定位

1.绝对路径定位
/根目录
//:相对节点
父子节点使用/链接
兄弟节点使用[第几个节点]

例如百度:
/html/body/div/div/div[5]/div/div/form/span/input
2.元素属性定位find_element_by_xpath("//input[#id='kw']")

3.层级与属性结合find_element_by_xpath("//form[@id='form'/span/input]")
4.逻辑运算符find_element_by_xpath("//input[#id='kw']" and @class='su')
from selenium import webdriver

import time

# 创建谷歌浏览器对象
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")


driver.find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span/input").send_keys("assss")
driver.find_element_by_id("su").click()

time.sleep(4)

driver.quit()

(5)css定位

css选择器的常见用法

选择器例子
.class.intro
#id#firstname
**
elementp
element>elementdiv>input
elemelt+elementdiv+input
[attribute=value][target=_blank]
from selenium import webdriver

import time

# 创建谷歌浏览器对象
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_css_selector(".s_ipt").send_keys("dsklj")
driver.find_element_by_css_selector("#su").click()
time.sleep(4)

driver.quit()

3.对元素进行操作

clear(): 清除操作
send_keys(value) 模拟按键操作
click() 单击操作
Current_url 返回当前页面的url地址
title 返回当前页面title
Text  获取页面(提示框,警告框)显示的文本
get_attribute(name) 获得属性值,文本框中的值使用value属性名
is_displayed()  设置该元素是否用户可见
浏览器操作
控制窗口大小
# 控制窗口固定大小
driver.set_window_size(1080,600)
# 控制窗口最小化
driver.minimize_window()
# 控制窗口最大化
driver.maximize_window()
控制浏览器后退前进
driver.back()
driver.forward();
模拟浏览器刷新
driver.refresh()
截屏操作
driver.save_screenshot(r"C:\Users\92588\Desktop\study-测试\笔记\第三章 Python学习\1.png")
模拟浏览器关闭
driver.quit()
driver.close()

练习(多窗口切换)

from selenium import webdriver

import time
'''
打开淘宝
点击天猫
选择女装
返回天猫
'''

'''
句柄(handler):每一个页面都一个值,对一个页面来说是唯一,是页面的一个标识
driver是要绑定的句柄的,你的driver只能控制你绑定句柄的这个页面

获取当前页面的句柄driver.current_window_handle
获取打开所有页面的句柄driver.window_handles
'''
driver = webdriver.Chrome()

driver.get("https://www.taobao.com/")
print(driver.current_window_handle)
driver.find_element_by_link_text("天猫").click()

# 获取打开所有页面的句柄
handles = driver.window_handles
# 将天猫的句柄绑定给driver
driver.switch_to_window(handles[1])

time.sleep(5)
driver.find_element_by_link_text("女装").click()


# 获取打开所有页面的句柄
handles = driver.window_handles
# 将女装的句柄绑定给driver
driver.switch_to_window(handles[2])
time.sleep(5)
driver.back()
time.sleep(5)
# driver绑定的窗口关闭
driver.close()
鼠标、键盘操作
鼠标操作
鼠标事件,click()是模拟鼠标的点击操作
WebDriver中,将鼠标右击,双击,悬停,甚至鼠标拖动等功能封装在ActionChains类中
需要导入包from selenium.webdriver.common.action_chains import  ActionChains

常见的方法有
perform()执行所有ActionChains存储的行为
context_click()   右击
double_click()    双击
drag_and_drop()   拖动
move_to_element() 鼠标悬停
'''
鼠标事件,click()是模拟鼠标的点击操作
WebDriver中,将鼠标右击,双击,悬停,甚至鼠标拖动等功能封装在ActionChains类中
需要导入包from selenium.webdriver.common.action_chains import  ActionChains

常见的方法有
perform()执行所有ActionChains存储的行为
context_click()   右击
double_click()    双击
drag_and_drop()   拖动
move_to_element() 鼠标悬停
'''
from selenium.webdriver.common.action_chains import  ActionChains
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)

# # 鼠标悬浮到设置按钮上
# setButton = driver.find_element_by_id("s-usersetting-top")
# # 将设置按钮的操作行为封装到ActionChains,
# ActionChains(driver).move_to_element(setButton).perform()

# 在百度文本框中鼠标右键
kw = driver.find_element_by_id("kw")
ActionChains(driver).context_click(kw).perform()
time.sleep(2)
driver.close()
键盘操作
键盘事件,Keys()提供了键盘上几乎所有的按键方法。send_key()方法可以用来模拟键盘苏联,除此之外,我们还可以用它来输入键盘上的按键,甚至组合键,如Curl+A等
需要导入包from selenium.webdriver.common.keys import Keys
Keys.BACK_SPACE  --删除
Keys.CONTROL,"a" --Curl+A
等等
from selenium.webdriver.common.keys import Keys

from selenium import webdriver
import time

'''
例子

1。百度“wdd”
2。删除多输入的d
3.再输入“东东  是个胆小鬼”
4.ctrl+a 全选文本框内容
5.ctrl+x 截切
6.ctrl+v 粘贴复制的内容
7.回车完成搜索
8.退出让览器
'''
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)

# 1。百度“wdd”
driver.find_element_by_id("kw").send_keys("wdd")
time.sleep(1)
# 2。删除多输入的d
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(1)
# 3.再输入“wd  是个胆小鬼”
driver.find_element_by_id("kw").send_keys(" 是个胆小鬼")
time.sleep(1)
# 4.ctrl+a 全选文本框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
time.sleep(1)
# 5.ctrl+x 截切
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
time.sleep(1)
# 6.ctrl+v 粘贴复制的内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
time.sleep(1)
# 7.回车完成搜索
driver.find_element_by_id("kw").send_keys(Keys.ENTER)
time.sleep(1)
# 8.退出让览器
driver.close()
警告窗口处理
WebDriver中处理JavaScript所生成的
alert
confirm
prompt
具体做法
switch_to_alert()
返回定位到后,使用
text:返回文字
accept():接受现有的警告窗口
dismiss():放弃现有的警告窗口
send_keys(KeysToSend):发送文本到警告窗口
'''
    警告窗口的处理
    1.百度
    2.设置悬浮
    3.悬浮里的搜索设置
    4.设置每页显示20条
    5.保存设置
    6.关闭弹窗
    7.关闭浏览器
'''
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver = webdriver.Chrome()
# 1.百度
driver.get("https://www.baidu.com")
driver.maximize_window()
# 2.鼠标悬浮到设置按钮上
setButton = driver.find_element_by_id("s-usersetting-top")
# 将设置按钮的操作行为封装到ActionChains,
ActionChains(driver).move_to_element(setButton).perform()
time.sleep(3)
# 3.悬浮里的搜索设置
driver.find_element_by_link_text("搜索设置").click()
time.sleep(2)
# 4.设置每页显示20条
driver.find_element_by_xpath('//*[@id="se-setting-3"]/span[2]/label').click()
time.sleep(2)
# 5.保存设置,会弹出弹框
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
time.sleep(2)
# 6.获取弹窗内容,关闭弹窗
# 把弹窗内容获取到赋给dd
dd = driver.switch_to.alert
# 获取弹窗内容
print(dd.text)
# 确认保存关闭
dd.accept()
# 7.关闭浏览器
driver.close()

多窗口、多表单处理
在web应用中会遇到frame/iframe表单嵌套页面的应用,webdriver只能在一个页面上对元素识别与定位,这时就需要switch_to.frame()方法将当前定位的主体切换为frame/iframe表单嵌套页面中
设置元素等待
web使用ajax技术,导致浏览器加载页面时,页面元素可能不能急事加载完成,造成定位元素困难。我们可以通过设置元素等待来完善

隐式等待:创建driver对象的时候,为浏览器对象创建一个等待时间,但是这个时间不是固定的,并不影响脚本执行速度,当脚本执行某个位置时,如果可以定位,则直接执行,不能定位,这等待,只到超时,就抛出异常
	driver.implicitly_wait(10) 单位s
显式等待:明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到就一直等,除非在规定的时间之内没有找到,那么就跳出Exception(特别关注莫一个元素才使用)
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By 				WebDriverWait(driver,timeout=1,poll_frequency=0.5,ignored_exceptions=None)
# timeout --- 超时时间
# poll_frequency -- 频率
# ignored_exceptions --
# until 直到EC.presence_of_element_located的时候
WebDriverWait(driver,timeout=1,poll_frequency=0.5,ignored_exceptions=None).until(EC.presence_of_element_located((By.ID,"su")),'找不到元素')

强制等待
	time.sleep(5) 单位s,休眠


优先级:隐式等待 》 强制等待
	  time.sleep没有影响
脚本练习
qq邮箱基本版登录
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.qq.com/")
time.sleep(3)
driver.find_element_by_link_text("邮箱").click()
hanles = driver.window_handles
# 把句柄转导邮箱页面
driver.switch_to.window(hanles[1])
time.sleep(3)
driver.find_element_by_link_text("基本版").click()
time.sleep(3)

driver.find_element_by_id("u").send_keys("925880945")
time.sleep(1)
driver.find_element_by_id("p").send_keys("########")
time.sleep(1)
driver.find_element_by_xpath('//*[@id="go"]').click()
time.sleep(3)
print(hanles)
# driver.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值