博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium-WebDriverApi接口
阅读量:6907 次
发布时间:2019-06-27

本文共 5916 字,大约阅读时间需要 19 分钟。

启动浏览器

from selenium import webdriverdriver = webdriver.Chrome()  #启动浏览器,创建一个remote serverdriver.get('http://ui.imdsx.cn/uitester/')  #打开client端,获取请求js = 'window.scrollTo(0,0)' #将滚动条调至最上方driver.execute_script(js)     #执行js

 

1、获取标签元素:selenium提供了18种定位方式:8种单数+8种复数+2种

1 #单数定位方式: 2 #1、通过ID定位目标元素 3 driver.find_element_by_id('i1') 4  5 #2、通过class定位目标元素 6 driver.find_element_by_class_name('classname') 7  8 #3、通过name属性定位目标元素 9 driver.find_element_by_name('name')10 11 #4、通过标签名称定位(在一个页面中,标签一般会存在重复,不建议用这种方式定位)12 driver.find_element_by_tag_name('input')13 14 #5、通过链接标签:a标签中的文本查找元素15 driver.find_element_by_link_text('新建标签页面')16 17 #6、通过链接标签:a标签中的部分文本查找元素18 driver.find_element_by_partial_link_text('标签')19 20 #7、通过Xpath定位目标元素21 driver.find_element_by_xpath('//input[@id="i1"]')22 23 #8、通过css Selector定位目标元素24 driver.find_element_by_css_selector('#i1')25 driver.find_element_by_css_selector('input[name="name"]')
1  #复数定位方式,返回结果是一个列表类型: 2  #1、通过ID定位目标元素 3  driver.find_elements_by_id('i1') 4   5  #2、通过class定位目标元素 6  driver.find_elements_by_class_name('classname') 7   8  #3、通过name属性定位目标元素 9  driver.find_elements_by_name('name')10  11  #4、通过标签名称定位(在一个页面中,标签一般会存在重复,不建议用这种方式定位)12  driver.find_elements_by_tag_name('input')13  14  #5、通过链接标签:a标签中的文本查找元素15  driver.find_elements_by_link_text('新建标签页面')16  17  #6、通过链接标签:a标签中的部分文本查找元素18  driver.find_elements_by_partial_link_text('标签')19  20  #7、通过Xpath定位目标元素21  driver.find_elements_by_xpath('//input[@id="i1"]')22  23  #8、通过css Selector定位目标元素24  driver.find_elements_by_css_selector('#i1')
1 #前面16种方式都是通过调用这个方法实现的2 driver.find_elements('class','inner')3 driver.find_element('id','i1')

 2、窗口操作

1 #设置浏览器大小 2 driver.set_window_size(300,300) 3  4 #获取浏览器的大小 5 print(driver.get_window_size()) 6  7 #窗口最大化 8 driver.maximize_window() 9 10 #获取当前窗口针对于windows的位置坐标x,y11 driver.get_window_position()12 13 #设置当前窗口针对Windows的位置14 driver.set_window_position(30,30)

3、截图

1 #截图2 driver.get_screenshot_as_file('aaa.jpg')

4、获取浏览器打开的句柄

1 #获取当前浏览器所打开的全部tag页,返回的是一个列表2 print(driver.window_handles)3 4 #获取当前浏览器的当前tag页5 print(driver.current_window_handle)

5、切换tag页

1 handles = driver.window_handles  #获取所有的tag页2 driver.switch_to_window(handles[-1]) #切换到最后一个tag页,但是这不是最新的方法3 driver.switch_to.window(handles[-1]) #切换到最后一个tag页,这是新的方法

 6、关闭与退出

1 #当开启多个页面时,关闭当前页面2 driver.close()3 #当开启多个页面时,退出并关闭所有页面4 driver.quit()

7、ElementApi接口

1 element = driver.find_element_by_css_selector('[ng-model="loginCredential.account"]') 2 # 根据标签属性名称,获取属性value 3 element.get_attribute('style') 4 #向输入框输入字符串,如果input的type为file类型,可以输入文件绝对路径上传文件 5 element.send_keys('123566') 6 #清除文本内容 7 element.clear() 8 #鼠标左键点击操作 9 element.click()10 # 通过属性名称获取属性,同.get_attribute()11 element.get_property('id')12 #返回元素是否课件 True or False13 element.is_displayed()14 #返回元素是否被选中 True or False15 element.is_selected()16 #返回标签元素的名字17 element.tag_name18 #获取当前标签的宽和高19 element.size20 #获取元素的文本内容21 element.text #如果这种方法没办法获取到标签内的文字,可以使用下面这种方式:    element.get_attribute('innerText') 22 #模仿回车按钮 提交数据 23 element.submit() 24 #获取当前元素的坐标 25 element.location 26 #截取图片 27 element.screenshot()

8、cookie操作

1 #根据cookieKey,获取cookie信息 2 cookie = driver.get_cookie('cookieKey') 3 #获取所有cookie信息 4 cookies = driver.get_cookies() 5 #添加cookie,严格按照格式添加,cookie的key为name,value为value 6 driver.add_cookie({
'name':'tmp','value':'11122336665555'}) 7 # 删除所有cookie信息 8 driver.delete_all_cookies() 9 # 根据cookieKey删除对应cookie10 driver.delete_cookie('UiCode')

 9、浏览器操作

1 #刷新2 driver.refresh()3 #前进4 driver.forward()5 #后退6 driver.back()

10、其他

1 #返回页面源码2 driver.page_source3 #返回tag标题4 driver.title5 #返回当前url6 driver.current_url7 #获取浏览器名称 如:chrome8 driver.name

 11、操作iframe

1 #多层嵌套的iframe 只能一层一层进入 2 driver.switch_to.frame('top-frame') 3 driver.find_element_by_css_selector('#newtag').send_keys('123456') 4  5 driver.switch_to.frame('baidu-frame') 6 driver.find_element_by_css_selector('#kw').send_keys('2222') 7  8 #返回上一层 9 driver.switch_to.parent_frame()10 #返回到最底层11 driver.switch_to.default_content()

12、弹框处理

1 # alert 实际上也是Selenium的一个模块 2 from selenium.webdriver.common.alert import Alert 3   4 # 也可以通过Webdriver的switch_to来调用 5   6 # 点击确认按钮 7 driver.switch_to.alert.accept() 8   9 # 如果是确认弹框,相当于点击需要和X按钮10 driver.switch_to.alert.dismiss()11    13 # 如果alert上有文本框时,可以输入文字。(注: 没遇到过)14 driver.switch_to.alert.send_keys()15  16 # 返回Alert上面的文本内容17 text = driver.switch_to.alert.text

13、select模块,仅适用于select元素:

引用路径:

1 from selenium.webdriver.support.select import Select

操作:

1 # 通过select选项的索引来定位选择对应选项(从0开始计数) 2 Select(s).select_by_index(5) 3   4 # 通过选项的value属性值来定位 5 Select(s).select_by_value('2') 6   7 # 通过选项的文本内容来定位 8 Select(s).select_by_visible_text('牡丹江') 9  10 # 返回第一个选中的optionElement对象11 Select(s).first_selected_option12  13 # 返回所有选中的optionElement对象14 Select(s).all_selected_options15  16 # 取消所有选中的option17 Select(s).deselect_all()18  19 # 通过option的index来取消对应的option20 Select(s).deselect_by_index(1)21  22 # 通过value属性,来取消对应option23 Select(s).deselect_by_value('')24  25 # 通过option的文本内容,取消对应的option26 Select(s).deselect_by_visible_text('')

 

 小贴士:

1、如果获取到一个元素之后,想要继续获取它的下一层标签,可以继续用查找的方法,例如:

1 css_1 = 'xpath=>//div[@class="company"]//div[@class="com bg7 pad2"]'2 company_list = self.page.get_elements(css_1)3 for company in company_list:4      if company.find_element_by_css_selector('[class="comName f2 c1 ng-binding"]').get_attribute('innerText').count('中华'):5            company.find_element_by_css_selector('[class="sel-b com-input"]>input[type="checkbox"]').click()6      elif company.find_element_by_css_selector('[class="comName f2 c1 ng-binding"]').get_attribute('innerText').count('平安'):7            company.find_element_by_css_selector('[class="sel-b com-input"]>input[type="checkbox"]').click()8      elif company.find_element_by_css_selector('[class="comName f2 c1 ng-binding"]').get_attribute('innerText').count('太平洋'):9            company.find_element_by_css_selector('[class="sel-b com-input"]>input[type="checkbox"]').click()

 

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/wu-xw/p/10111597.html

你可能感兴趣的文章
C#语言学习--基础部分(十八)数组参数
查看>>
MySql简单分页存储过程
查看>>
EF6 在原有数据库中使用 CodeFirst 总复习(五、生成发帖页面)
查看>>
UVA 277 Puzzle
查看>>
rancher中级(一)(rancher的存储,网络)
查看>>
个人总结
查看>>
【第40题】2019年OCP认证12C题库062考试最新考试原题
查看>>
怎样在linux下查找一个结构体的原始定义
查看>>
OpenApi开源项目以及总结
查看>>
UNIX-LINUX C语言编程->实验室->多次打开文件实验
查看>>
8.8
查看>>
http://www.cnblogs.com/kenshincui/p/3840294.html
查看>>
更改SQL SERVER默认端口
查看>>
ajax的traditional属性
查看>>
网络安全重点总结
查看>>
git &github 快速入门
查看>>
windows下mysql忘记root密码的解决方法
查看>>
hdu 1907 John / 2509 Be the Winner 博弈 最后取完者为输
查看>>
原来生活如此精彩
查看>>
〖Linux〗Ubuntu13.04 安装KCOPSE过程笔录
查看>>