UI自动化测试(2)
1、下拉选择框:Select类
主要就是用来操作下拉选择框。下拉框操作步骤:
(1)先导入Select类
(2)定位下拉框的元素属性
(3)对Select类进行实例化
(4)定位下拉框中的选项,也就是使用Select类进行实例化后的对象调用类里面的方法。
A、索引定位:select_by_index()
B、文本定位:select_by_visible_text()
C、value定位:select_by_value()
当互联网产品的下拉框选项不标准时,我们下拉框还是用常规的方式进行选项的定位,一般用xpath中的full xpath。
1.1下拉选择框示例
#先导入Select类
from selenium import webdriver
from selenium.webdriver.support.select import Select
import time
driver=webdriver.Chrome()
driver.get("file:///D:/%E5%AD%A6%E4%B9%A0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/index(1).html")
#定位下拉框的元素属性
location=driver.find_element_by_id("nr")
#对Select类进行实例化
obj=Select(webelement=location) #webelement:是Select类的元素属性,其值指向的是要操作的下拉框的定位。
time.sleep(3)
#定位下拉框中的选项:
# #第一种:使用索引定位
# obj.select_by_index(3)
# #第二种:使用文本定位
# obj.select_by_visible_text("Java语言")
#第三种:使用value定位
obj.select_by_value("Java")
time.sleep(3)
driver.quit()
1.2下拉选择框实战
1.2.1拉勾网实战
当互联网产品的下拉框选项不标准时,我们下拉框还是用常规的方式进行选项的定位,一般用xpath中的full xpath。
#下拉框实战:拉勾网职位搜索,工作经验选择经验3-5年
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.lagou.com/")
time.sleep(3)
driver.find_element_by_id("search_input").send_keys("测试开发工程师")
time.sleep(3)
driver.find_element_by_id("search_button").click()
time.sleep(2)
driver.find_element_by_xpath("/html/body/div/div[1]/div/div[2]/div[1]/div[1]/div[2]/div/ul/li[1]/div/span").click()
time.sleep(3)
driver.find_element_by_xpath("/html/body/div/div[1]/div/div[2]/div[1]/div[1]/div[2]/div/ul/li[1]/div/div/ul[2]/li[3]/span").click()
time.sleep(3)
driver.quit()
1.2.2唯品会实战
#下拉框实战:唯品会商品搜索搜索,搜索女式凉鞋,然后点击更多选项。
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://mst.vip.com/Sk5UetlrbVvfAXVxfL3k5w.php?wq=1&wapid=mst_100029063&_src=mst&extra_banner=115029063&nova=1&nova_platform=2&mst_page_type=guide")
time.sleep(5)
#定位搜索框的元素属性
driver.find_element_by_xpath("/html/body/header/div[2]/div/div[2]/div[1]/input").send_keys("女式凉鞋")
time.sleep(5)
#点击搜索按钮
driver.find_element_by_xpath("/html/body/header/div[2]/div/div[2]/div[1]/a").click()
time.sleep(7)
#点击更多选项
driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/button[1]/span[1]").click()
time.sleep(5)
driver.quit()
2、弹出框:Alert类
Alert类是针对对弹出框的处理,主要包括alert警告框、Confirm确认框、Prompt消息对话框、它里面的方法为:
accept:是接受Confirm弹出框。
dismiss:是拒绝接受Confirm弹出框。
send_keys:是在Prompt消息对话框里面输入想要输入的内容。
2.1交互1:对弹出框进行确定取消
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
#alert的交互
#第一种:确定取消的交互
driver=webdriver.Chrome()
driver.get("file:///D:/%E5%AD%A6%E4%B9%A0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/%E7%A1%AE%E5%AE%9A%E6%B6%88%E6%81%AF.html")
time.sleep(3)
#用tag_name元素属性定位
driver.find_element_by_tag_name("input").click()
time.sleep(3)
#点击确定按钮
driver.switch_to.alert.accept()
time.sleep(2)
#页面刷新
driver.refresh()
time.sleep(2)
driver.find_element_by_tag_name("input").click()
time.sleep(2)
#点击拒绝按钮
driver.switch_to.alert.dismiss()
time.sleep(3)
driver.quit()
2.2交互2:获取警告的文本信息
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
#alert的交互
#第二种:获取警告的文本信息
driver=webdriver.Chrome()
driver.get("file:///D:/%E5%AD%A6%E4%B9%A0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/%E8%AD%A6%E5%91%8A%E6%A1%86.html")
print(driver.switch_to.alert.text)
time.sleep(3)
driver.quit()
2.3交互3:消息对话框输入内容
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
import time
#alert的交互
#第三种:消息对话框输入内容
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("file:///D:/%E5%AD%A6%E4%B9%A0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6/%E6%B6%88%E6%81%AF%E5%AF%B9%E8%AF%9D%E6%A1%86.html")
#用tag_name元素属性定位
driver.find_element_by_tag_name("input").click()
time.sleep(3)
#消息对话框输入信息
driver.switch_to.alert.send_keys("本是人间二月花")
time.sleep(2)
#点击确定按钮
driver.switch_to.alert.accept()
time.sleep(2)
#页面刷新
driver.refresh()
driver.find_element_by_tag_name("input").click()
time.sleep(3)
driver.switch_to.alert.send_keys("本是人间二月花")
time.sleep(2)
driver.switch_to.alert.dismiss()
time.sleep(2)
driver.quit()
3、iFrame框架:iFrame类
3.1概述
1、遇到iFrame框架,解决问题的思路是:
(1)先进入到iframe的框架;
(2)然后在定位框架里面的元素属性;
2、怎么判断是否遇到iFrame框架?
当使用了所有的元素定位的方式并且都是正确的,但是就是提示找不到。那么就查看源码是否存在iFrame的框架,iFrame框架的关键字是iframe。如果存在,通过三种方式可以进入到iFrame的框架:
1、通过ID
2、通过索引
3、通过name(基本不使用)
3.2iFrame框架示例
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://file.qq.com/")
time.sleep(7)
#进入第一层iFrame框架
# # driver.switch_to.frame("login_frame1") #根据ID定位
# driver.switch_to.frame(0) #根据索引定位
driver.switch_to.frame("login_frame") #根据name定位
time.sleep(3)
#进入第二层iFrame框架
# driver.switch_to.frame("ptlogin_iframe")
driver.switch_to.frame(0)
time.sleep(3)
# driver.find_element_by_link_text("账号密码登录").click() #这里由于超链接的地址不完整,使link_text是定位不到的。
driver.find_element_by_xpath("/html/body/div[1]/div[9]/a[1]").click()
time.sleep(3)
driver.find_element_by_id("u").send_keys("2316937339@qq.com")
time.sleep(3)
driver.quit()
4、鼠标事件:ActionChains类
4.1悬浮框处理
#鼠标事件
#悬浮框处理
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
#对webdriver进行实例化
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
time.sleep(3)
#对ActionChains进行实例化处理,driver是ActionChains的实例属性
obj=ActionChains(driver=driver)
location=driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[4]/span")
#ActionChains进行实例化后调用ActionChains中的方法,to_element是move_to_element的参数,值指向的是要操作的位置。
obj.move_to_element(to_element=location).perform()
time.sleep(3)
#点击搜索设置
driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[4]/div[1]/div/a[1]/span").click()
time.sleep(3)
driver.quit()
4.2右键的操作
#鼠标事件
#右键的操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
#对ActionChains进行实例化处理,driver是ActionChains的实例属性
obj=ActionChains(driver=driver)
#定位需要操作的位置
location=driver.find_element_by_id("kw")
#ActionChains进行实例化后调用ActionChains中的方法,on_element是context_click的参数,值指向的是要操作的位置
obj.context_click(on_element=location).perform()
time.sleep(3)
driver.quit()
4.3双击的操作
#鼠标事件
#双击的操作
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
time.sleep(2)
#对ActionChains进行实例化处理,driver是ActionChains的实例属性
obj=ActionChains(driver=driver)
#元素属性定位输入框
driver.find_element_by_id("kw").send_keys("赵丽颖")
time.sleep(2)
#定位要进行操作的位置
location=driver.find_element_by_id("su")
#ActionChains进行实例化后调用ActionChains中的方法,on_element是context_click的参数,值指向的是要操作的位置
obj.double_click(on_element=location).perform()
time.sleep(3)
driver.quit()