学习元素定位

selenium 原理?

用python和java都可以写

通过插件写一些代码和脚本操作浏览器,会通过selenium  翻译器把脚本翻译成,selenium core 这种json 格式数据报文, 并且发给远端的浏览器

因为浏览器厂商,火狐和谷歌有一套特殊自动定制机制,会生成js 操作后,返回一个结果给 selenium core 在返回给你的脚本 

这套流程翻译的数据的格式和过程符合webdriver协议   

想要定位元素,首先你要知道你要找到元素!!!!!!!!!!!!!!!!

driver.find 有一系列的方法就是寻找的方法

因为查询元素的方式不一样,driver.find方法也不一样 

第一你基本的逻辑思想怎么去思考?????????

先要懂概念,有了概念才能去操作

元素,对象,控件  (比如一些按钮)的前提了解?????

html<input id='a' name='b'>xxxxx</input>

1.标签名称和元素类型  input   可以理解html<input id='a' name='b'></input>  是一个元素,对象,控件  里面的内容是文本值 

也叫text

2.再比如<button>登录</button>

button 是个按钮,为什么button按钮为什么有一个text ,这个text是给用户看的,button是元素的标签名称 

3. 属性id 是唯一 的, name 属性呢啥意思??(提交给服务器的名称)

class属性(这个属性是给元素进行分类的样式)class重复性很高

一般定位方法(有id用id ,没有id用name,如果也没有用calss,或者取text值,如果都找不到,需要使用特殊上下级关系的复杂语句 xpath)

4.操作链接 a标签 可以定位链接的文本字  

 

 这种使用text值保证他不重复

5.如果都找不到,需要使用特殊上下级关系的复杂语句 xpath 

常见的元素类型????????

input输入域  根据输入域的type类型的不同长的不一样 

button按钮 

select 下拉列表   现在好多不用了

ul         列表

a         超链接

image 图片

table  表格

form  表单 

div     块元素

文本  p段落  span短文本 同行 

 滚动屏幕到底部的两种方法??????

第一种

from selenium.webdriver.common.action_chains import ActionChains as ac

driver.execute_script('window.scrollTo(0,5000)')#滚动屏幕
ac=ActionChains(driver)
第二种
driver.execute_script('window.scrollTo(0,3000)') js方法

取值类操作,只有两种方法????取元素和取文本值?????

1.获取文本值     driver.find_element_by_id('readme').text

2.获取属性值    driver.find_element_by_class_name('baidu').get_attribute('href')

 如果你想打开一个新窗口覆盖旧的窗口,不想开多个窗口,怎么防止新窗口不弹出???

link=driver.find_element_by_class_name('baidu').get_attribute('href')
driver.get(link)
time.sleep(2) 预期只打开新窗口,旧窗口自动关
下拉框的操作???????????????????????????

单独的控制操作,需要注意 操作前from selenium.webdriver.support.select import Select 这行代码ctrl +webdriver 放到这个类下

elenent=driver.find_element_by_name('select')#把下拉列表对象
select=Select(elenent)#创建对象
# select.select_by_index()#取下拉的下标
select.select_by_value('1')#最靠谱
time.sleep(2)
driver.maximize_window()
select.select_by_value('2')#最靠谱
# select.select_by_visible_text()#最不靠谱取值,文本内容

 循环选择下拉框所有内容????????

for i  in range(0,len(select.options)):
select.select_by_index(i)
time.sleep(2)
连续动作的操作????
from selenium.webdriver.common.action_chains import ActionChains  前提导入语句 

driver.execute_script('window.scrollTo(0,1000)')#滚动屏幕
ac=ActionChains(driver)
#拖动鼠标到某个按钮
ac.move_to_element(driver.find_element_by_class_name("over"))#焦点移动到那个元素
ac.perform()#动作回放表演
双击操作??????????
import time
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('file:///G:/a-%E5%88%98%E6%B3%BD%E8%80%81%E5%B8%88%E8%A7%86%E9%A2%91/ui%E8%87%AA%E5%8A%A8%E5%8C%96/ui%E8%87%AA%E5%8A%A8%E5%8C%96/demo.html')
time.sleep(2)
driver.execute_script('window.scrollTo(0,1000)')#滚动屏幕
ac=ActionChains(driver)
#拖动鼠标到某个按钮 点击某个位置触发
ac.move_to_element(driver.find_element_by_class_name("over"))#焦点移动到那个元素
ac.perform()#动作回放表演
time.sleep(2)
ac.double_click(driver.find_element_by_class_name('double'))#双击
ac.perform()#动作回放表演
拖拽的操作????????????????????????比如把一个位置从左滑到右
ac.drag_and_drop(driver.find_element_by_xpath("//div[@id='slider']/span"),
driver.find_element_by_id("slider_confirm"))
ac.perform()




posted @ 2021-08-13 17:43  测试董先生  阅读(71)  评论(0编辑  收藏  举报