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[@id="kw"]').send_keys('456') # 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调试的方式确保元素是可以点击的