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

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

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

# 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()# 跳到最外面的页面
相关文章
相关标签/搜索