[day15]UI自动化值selenium的基础

本次主要学习关于selenium元素定位,浏览器的控制等方面的知识,需要一定的HTML基础,了解了HTML基础后,更能好的了解元素定位的方式

selenium提供了18中元素定位的方式,在这里拣常用的8种方式进行学习,还有一些元素操作,浏览器的操作,鼠标操作,切换页面,切换表单等操作

# selenium之元素定位
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 1.id定位(以打开百度定位到输入框为例)
driver.find_elements_by_id("kw")# id具有唯一性
# 2.name定位
driver.find_element_by_name("wd")# name属性可以不唯一,定位时需要确认注意
# 3.class 定位
driver.find_element_by_class_name("s_ipt")# class属性也可以不唯一,定位时需要注意
# 4.tag标签定位
driver.find_element_by_tag_name("input")# 单个标签法案为太广,一般不用这种方法
# 5.link 文本标签
driver.find_element_by_link_text("新闻") # 通过元素标签定的文本信息进行定位
# 6.取部分文本标签进行定位
driver.find_element_by_partial_link_text("")# 通过取元素标签的部分文本信息进行定位
# 7.xpath 定位
# (1).绝对路径进行定位,通过标签的层级关系找到元素的绝对路径
driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
# (2).利用元素的属性进行定位 '//'表示当前目录下,'*'代表当前目录下所有标签,
# [@id='kw']表示这个元素的id属性值为kw,元素属性可以唯一标记一个元素,都可以用这种方法定位
driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@class='s_ipt']")
# (3).层级与属性结合
driver.ffind_element_by_xpath("//span[@class='bgs_bth']/input")
# (4).通过逻辑运算符 通过逻辑运算符连接多个属性查找元素
driver.find_element_by_xpath("//input[@id='kw' and @class='su']/span/input")
# 8.css定位 css通过选择器为页面上的元素绑定属性,选择器知识可以通过HTML基础了解
# (1).class 选择器
driver.find_element_by_css_selector(".s_ipt") # '.'表示通过class属性定位元素
# (2)id属性定位
driver.find_element_by_css_selector("#kw") # '#'表示通过id属性定位
# (3).通过标签名进行定位,一般不单独使用,推荐嵌套使用
# 1).通过父子关系定位
driver.find_element_by_css_selector("span>input")
# 2).通过任意属性定位,只要可以唯一的标记元素
driver.find_element_by_css_selector("[name=kw]")
driver.find_element_by_css_selector("[type=submit]")
# 3).组合定位,利用属性与层级关系进行定位
driver.find_element_by_css_selector("form.fm>span>input.s_ipt")
driver.find_element_by_css_selector("form#form>span>input#kw")

# 控制浏览器操作
# 1.控制浏览器弹窗的大小
driver.set_window_size(480,800)#以规定的大小打开浏览器
driver.maximize_window()#不传参数,以全屏的方式打开浏览器
# 2.控制浏览器的前进,后退,刷新等操作
driver.back()#网页后退
driver.forward()#网页前进
driver.refresh()#网页刷新

# 简单的元素操作
# 1.send_keys() 模拟键盘给输入框内输入值
driver.find_element_by_css_selector("#kw").send_keys("hello")
time.sleep(2)
# 2.clear() 对输入框内的文本进行清除
driver.find_element_by_css_selector("#kw").clear()
# 3.click() 模拟鼠标进行单击
driver.find_element_by_css_selector("#su").click()
driver.find_element_by_css_selector("#su").submit()
# 上述点击的例子可以用submit,submit方法用于提交表单,类似与“回车”操作,常常与click混用,但没有click应用范围广

# 常用鼠标操作
# 鼠标交互的方式包括:右击,双击,悬停,鼠标拖动等功能,在webdriver中,这些方法都封装在ActionChains类中;
from selenium.webdriver.common.action_chains import ActionChains
# 1.context_click()  右击
right_click = driver.find_element_by_css_selector("xx")
ActionChains(driver).context_click(right_click).perform()
# 首先定位到要单机的元素:right_click,
# 调用ActionChains类,将浏览器驱动driver作为参数传入
# context_click模拟鼠标右击,调用时需要指定元素(right_click)
# perform(),执行所有ActionChains中存储行为,可以理解为对整个操作的提交动作
# 2.move_to_element()  鼠标悬停
above = driver.find_element_by_css_selector("xx")# 定位到元素
ActionChains(driver).move_to_element(above).perform()# 对元素进行悬停操作
# 3.double_click  双击
double_click = driver.find_element_by_css_selector("xx")
ActionChains(driver).double_click(double_click).perform()
# 4.drag_and_drop(source,target)  鼠标拖放
source = driver.find_element_by_css_selector("xx")# 定位到元素的原位置
target = driver.find_element_by_css_selector("xx")# 定位到元素的目标位置
s2 = driver.find_element_by_css_selector("xx")
t2 = driver.find_element_by_css_selector("xx")
ActionChains(driver).drag_and_drop(source,target).perform()
ActionChains(driver).drag_and_drop(source,target).drag_and_drop(s2,t2).perform()#多个图片拖拽

# 多窗口切换
# 1.获取指针所在窗口
print(driver.current_window_handle)
# 2.获取到所有tag页面,以列表的形式返回
handles = driver.window_handles
# 3.取列表的元素,切换至元素所代表的页面
driver.switch_to_window(handles[-1])

# 多表单切换
# 1.当页面有多个表单页面组合而成的时候,就需要进行表单的切换才能定位到相应的元素
driver.get("xx")# 打开一个多表单网页
driver.switch_to_frame("xx")# 过元素定位到该表单(默认取id,name),然后切换至该表单
driver.switch_to.parent_frame()# 跳出当前一级菜单
driver.switch_to.default_content()# 跳到最外面的页面

 

posted @ 2018-12-11 15:59  白日依山尽的博客  阅读(135)  评论(0)    收藏  举报