selenium基础

dsx博客:

ui自动化:

1、了解页面html页面代码构成(html、css、js)

2、分析html页面,哪些属性可以用

3、定位html

 xpath:

1- //*[@id='i1']  先定位到所有元素,再定位到唯一元素

2-//input[@id='i1']   在input下定位唯一元素

3-有重复,先定位父级、再定位子集    //div[@class='driver']/input[id='i1']

4-联合唯一定位,//select[@name='city' and @size='4']

5-xpath可以使用脚标,css不可以

Css Selector: 简洁,建议使用这种方式定位

1-id定位   $('#idname')  匹配所有id属性中等于idname的元素   #i1

2-class定位   $(.info) 匹配所有class属性中包含info的元素    .c1

3- 标签选择器   $('input[name="bar"][name="wd"]')   input标签下name属性等于bar/wd的元素      -----  input[id='i1']     input[id='i1'][class='c1']

4-模糊定位,^(以。。开头) $(以。。结尾)    *包含

selenium-c/s架构,浏览器作为服务端,selenium代码作为客户端, 客户端向服务端发送请求,通过http接口的方式请求和响应数据

import time

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

time.sleep(1)

#18中定位方式
#8种单数形式
# driver.find_element_by_id('kw').send_keys('123') #向定位的id输入框发送数据,id唯一时方便使用
# driver.find_element_by_class_name('classname').send_keys('123')
# driver.find_element_by_name()
# driver.find_element_by_tag_name('input').send_keys('456')
# driver.find_element_by_xpath('//input[@>
# driver.find_element_by_css_selector('input[maxlength="255"]')   #优先考虑使用这种方式
#基于a标签文案,点击动作
# driver.execute_script('window.scrollTo(0,0)') #滚动页面x/y轴
# driver.find_element_by_link_text('诺贝尔奖公布爱因斯坦成绩单').click()
#m模糊查询,包含
# driver.find_element_by_partial_link_text('成绩单').click()

#8种复数形式,  所有符合的返回一个列表,复数形式就是单数形式加s
driver.find_elements_by_class_name('classname')

#2中底层方案
driver.find_element('id','value')
driver.find_elements()

#常用api

#操作浏览器
# driver.maximize_window()  #全屏
# size = driver.get_window_size() #获取当期浏览器的大小
# driver.back() #后退
# driver.refresh()#刷新
# driver.forward()#前进
# driver.get_screenshot_as_file('111.png') #截图
# driver.execute_script()#执行js代码

#操作元素
element = driver.find_element_by_partial_link_text('大师兄')
data = element.get_attribute('innerText')

#tab切换
# print(driver.window_handles) #有几个tab页面
# print(driver.current_window_handle) #当前在哪个tab
# driver.switch_to.window(driver.window_handles[-1]) #切换tab

#退出驱动
driver.quit()
#关闭当前页面
driver.close()

#操作弹窗
driver.find_element_by_css_selector('input[]') #调出弹窗
time.sleep(1)
driver.switch_to.alert.accept() # 取消弹窗1
driver.switch_to.alert.dismiss()# 取消弹窗2

#切换iframe-- 切换html标签,适用于多个html嵌套时
driver.switch_to.frame('top-frame')

#直接回到默认层的iframe
driver.switch_to.default_content()

#传递对象
element = driver.find_element_by_css_selector('[]')
driver.switch_to.frame(element)

 #等待

1-time  调试用

2-隐士

3-显示,每次都用,  步长0.5,超时时间10    timeout

#遇到定位不到的元素,怎么排查问题

1-分析html,看清楚哪些是我们要用的唯一属性

2-看清楚父子级关系

3-有没有浏览器的tab要切换,元素是否不在当前页面

4-排查有没有iframe

5-排查这个元素在代码调用打开时页面是否渲染了

6-排查定位的元素是否有display(隐藏)属性

7-不用显示等待,用time调试的方式确保元素是可以点击的