Selenium-WebDriverApi接口

启动浏览器

from selenium import webdriver

driver = webdriver.Chrome()  #启动浏览器,创建一个remote server
driver.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,y
11 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 False
13 element.is_displayed()
14 #返回元素是否被选中 True or False
15 element.is_selected()
16 #返回标签元素的名字
17 element.tag_name
18 #获取当前标签的宽和高
19 element.size
20 #获取元素的文本内容
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删除对应cookie
10 driver.delete_cookie('UiCode')

 9、浏览器操作

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

10、其他

1 #返回页面源码
2 driver.page_source
3 #返回tag标题
4 driver.title
5 #返回当前url
6 driver.current_url
7 #获取浏览器名称 如:chrome
8 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_option
12  
13 # 返回所有选中的optionElement对象
14 Select(s).all_selected_options
15  
16 # 取消所有选中的option
17 Select(s).deselect_all()
18  
19 # 通过option的index来取消对应的option
20 Select(s).deselect_by_index(1)
21  
22 # 通过value属性,来取消对应option
23 Select(s).deselect_by_value('')
24  
25 # 通过option的文本内容,取消对应的option
26 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()

 

 

 

 

 

 

 

  

posted @ 2019-03-14 11:33  年轻小阿姨  阅读(665)  评论(0编辑  收藏  举报