直接手写且引用当前标签中已有的元素
id 除了xpath元素中必须要添加单或者双引号其它都不需要
通过class元素来定位
格式:xpath=drvier.find_element_by_xpath(’//*[@class=“s_ipt”]’).send_keys(‘xpath中class元素定位!’)
通过:autocomplete="off"元素来定位
格式:xpath=drvier.find_element_by_xpath(’//*[@autocomplete=“off”]’).send_keys(‘xpath中其他属性定位’)
通过and来实现定位格式:xpath=drvier.find_element_by_xpath(’//*[@name=“wd” and @class=“s_ipt”]’).send_keys(‘多个组合属性定位xpath’)
场景9:css定位
格式:driver.find_element_by_css_selector(‘值’)
定位元素=右键copy copy selector
eg:driver.find_element_by_css_selector("[id='kw']").send_keys("我是css定位") (css中直接输入id属性名和属性值定位)
简写定位方法:driver.find_element_by_css_selector(".s_ipt").send_keys('')
name定位方法:driver.find_element_by_css_selector("[name='wd'].send_keys(")
css中id组合属性定位:driver.find_element_by_css_selector("input#kw").send_keys
css上级定位: driver.find_element_by_css_selector
("span>input").send_keys("我是cds中上级定位")
driver,find_element_by_css_selector
("from>span>input").send_keys("我是中上上级定位")
id定位: id前加#号,driver.find_element_by_css_selector(’#kw’).send_keys(‘我是css中的id加#’)
id中直接使用id值,driver.find_element_by_css_selector(’[id=“kw”]’).send_keys(‘我是css中的id和值 ‘)
class定位:class前加上.(点号),driver.find_element_by_css_selector(’.s_ipt’).send_keys(‘我是css中的class’)
name定位:driver.find_element_by_css_selector(’[name=“wd”]’).send_keys(‘我是css中的name’)
组合属性定位:
id组合属性定位:driver.find_element_by_css_selector(“input#kw”).send_keys(‘我是css组合id’)
class组合属性定位:driver.find_element_by_css_selector(“input.s_ipt”).send_keys(‘我是css组合class’)
其他属性组合定位:driver.find_element_by_css_selector(“input[name=‘wd’]”).send_keys(‘我是css组合name’)
仅有属性名,没有值也可以:driver.find_element_by_css_selector(“input[id]”).send_keys(‘我是css仅有属性名’)
两个其他属性组合定位
css有两个属性:driver.find_element_by_css_selector("[name=‘wd’][autocomplete=‘off’]")
其他属性定位:driver.find_element_by_css_selector(’[autocomplete=off].send_keys('其他属性定位')
~表示值由多个空格隔开,匹配属其中一个值的方法
driver.find_element_by_css_selector(’[id ~=kw]’).send_keys('')
^表示匹配属性值字符开头的方法
driver.find_element_by_css_selector(’[id ^=kw]’).send_keys(‘开头是kw’)
$表示匹配属性值字符结尾的方法
driver.find_element_by_css_selector(’[id $=kw]’).send_keys(")
css.send_keys(‘找上级定位’)
格式:driver.find_element_by_css_selector(‘form>span>input’).send_keys('')
elements是复数,返回的是一个列表
id复数定位find_elements_by_id(self, id_)
name复数定位find_elements_by_name(self, name)
class复数定位find_elements_by_class_name(self, name)
tag复数定位find_elements_by_tag_name(self, name)
link复数定位find_elements_by_link_text(self, text)
partial_link复数定位find_elements_by_partial_link_text(self, link_text)
xpath复数定位find_elements_by_xpath(self, xpath)
css复数定位find_elements_by_css_selector(self, css_selector)
方法一:driver.find_elements(“css selector”, “.mnav”)[5].click()
方法二:driver.find_elements_by_class_name(“mnav”)[5].click() 注意从索引0开始
五、python+selenium实现UI自动化元素定位总结
9种常用的定位方法中,优先顺序
(1)有id优先使用id定位
(2)没有id,考虑使用name或者class定位
(3)如果没有id,name,class再考虑用xpath,css定位
(4)如果链接可以考虑使用link_text,partial_link_text定位
(5)tag_name和javaScript还是用的比较少的
六、实战案例
实战案例1:(知识点:文本框,密码框,点击,输入)
url:“http://cms.duoceshi.cn/cms/manage/login.do” 知识点:文本框,密码框,点击,输入
url:“http://cms.duoceshi.cn/cms/manage/login.do”
成功登陆cms案例(输入账号,输入密码,点击登陆)内容管理系统
from selenium import webdriver
from time import *
driver=webdriver.Chrome()
url=“http://cms.duoceshi.cn/cms/manage/login.do”
driver.get(url)
sleep(2)
driver.maximize_window()
sleep(2)
driver.find_element_by_id(‘userAccount’).send_keys(‘admin’)
sleep(2)
driver.find_element_by_id(‘loginPwd’).send_keys(‘123456’)
sleep(2)
driver.find_element_by_id(‘loginBtn’).click()
sleep(10)
driver.close()
实战案例二 (定位:百度输入框和百度按钮) from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
url=“http://www.baidu.com”
driver.get(url)
sleep(3)
driver.find_element_by_class_name(“s_ipt”).send_keys(“杭州多测师教育科技有限公司”)
driver.maximize_window()
sleep(3)
driver.find_element_by_id(“su”).click()
百度中的贴吧链接按钮
定位链接
from selenium import webdriver
from time import *
driver=webdriver.Chrome()
url=“http://www.baidu.com”
driver.get(url)
sleep(2)
driver.maximize_window()
sleep(2)
driver.find_element_by_link_text(“贴吧”).click()
按钮
导入类from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
from selenium.webdriver.common.action_chains import ActionChains #类
driver.get(‘https://www.baidu.com/’)
driver.maximize_window()
driver.implicitly_wait(10)
高级搜索,隐私设置等a标签查看方法:先定位元素,按ctrl+shift+c,挪到鼠标
第一种方法直接定位
driver.find_element_by_id(‘s-usersetting-top’).click()
sleep(2)
driver.find_element_by_link_text(‘搜索设置’).click()
driver.find_element_by_link_text(‘隐私设置’).click()
sleep(3)
driver.find_element_by_link_text(“高级搜索”).click()
sleep(5)
driver.close()
第二种通过:ActionChains类来模拟鼠标点击悬停语法:d =driver.find_element_by_id(‘s-usersetting-top’)
ActionChains(driver).move_to_element(d).perform()
ActionChains()括号中接当前浏览器对象
move_to_element()括号中接当前你要模拟悬停的具体元素位置 .perform()对当前的位置进行点击悬停(类似于鼠标放在上面的动作)’’’ river.find_element_by_link_text(‘搜索设置’).click()
悬浮
from selenium import webdriver
from time import *
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Chrome()
url=“http://www.baidu.com”
driver.get(url)
sleep(2)
driver.maximize_window()
sleep(2)
s=driver.find_element_by_link_text(“更多”)
ActionChains(driver).move_to_element(s).perform()
sleep(4)
driver.find_element_by_link_text(“网盘”).click()
sleep(6)
driver.close()
ActionChains类(鼠标操作)常用于模拟鼠标的行为,比如单击、双击、拖拽等行为
click(on_element=None) — 鼠标单击
double_click(on_element=None) — 双击
context_click(on_element=None) — 右击
click_and_hold(on_element=None) — 鼠标单击并且按住不放
drag_and_drop(source,target) — 拖拽
drag_and_drop_by_offset(source,xoffset,yoffset) — 将目标拖动到指定的位置
key_down(value,element=None) — 按下某个键盘上的键
key_up(value,element=None) — 松开某个键
move_by_offset(xoffset,yoffset) — 鼠标从当前位置移动到某个坐标
move_to_element(to_element) — 鼠标移动到某个元素
move_to_element_with_offset(to_element,xoffset,yoffset)— 移动到距某个元素(左上角坐标)多少距离的位置
perform() — 执行链中的所有动作
release(on_element=None) — 在某个元素位置松开鼠标左
获取元素文本(text) 使用text获取文本
from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.get(‘http://www.baidu.com’)
driver.maximize_window()
sleep(2)
xp=driver.find_element_by_xpath(’//*[@id=“u1”]/a’).text
if xp==‘登录’:
print(‘OK’)
else:
print(‘NO’)
if判断,执行结果不一致和一致,程序会运行,
s=driver.find_element_by_id(“s-usersetting-top”).text
if s==“不设置”:
print(“ok”)
else:
print(“no”)
assert断言
assert判断表达式的条件成不成立,如果不成立就会立刻返回错误,而不用等到程序执行完成崩溃后,其相当于if not 表达式
案例一:
from selenium import webdriver
driver=webdriver.Chrome()
driver.get(‘https://www.baidu.com/’)
print(driver.title)
案例二:
a = 5
assert (a>1)
print(“断言成功,程序继续进行”)
案例三:
from selenium import webdriver
from time import *
driver=webdriver.Chrome()
url=“http://www.baidu.com”
driver.get(url)
assert(driver.title==“百度一下,你就知道”)
print(“断言成功,程序继续进行”)
实战案例三:下拉框 url :https://www.ctrip.com/
from selenium import webdriver
from selenium.webdriver.support.ui import Select#导入类
from time import sleep
driver=webdriver.Chrome()
url =‘https://www.ctrip.com/?sid=155952&allianceid=4897&ouid=index’
driver.get(url)
driver.maximize_window() #窗口最大化
sleep(8)
定位下拉选择框(索引值从0开始)s =driver.find_element_by_id(‘J_roomCountList’) #找到当前下拉框的位置
#Select(s).select_by_index(5) #通过索引来定位下拉值,从0开始
#Select(s).select_by_value(‘6’) #通过value来找到对应的值
Select(s).select_by_visible_text(‘6间’) #通过文本值
alert 弹框
from selenium import webdriver
from time import sleep
drvier=webdriver.Chrome()
url="file:///C:/Users/Administrator/Desktop/第二月课程/UI自动化/alert弹框.html"
drvier.get(url)
drvier.maximize_window()
sleep(2)
atl =drvier.switch_to.alert #切换进入到弹框中
atl.accept() #点击确定按钮
atl.dismiss() #点击取消按钮
enter 弹框
url="file:///C:/Users/Administrator/Desktop/第二月课程/UI自动化/enter.html"