zoukankan      html  css  js  c++  java
  • 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()

      

  • 相关阅读:
    web.xml文件详解
    SQLSERVER dbo解释
    sqlserver BULK INSERT
    google 基站定位api
    Sqlserver中Select和Set区别
    SQL Server优化50法
    ibatis常用16条SQL
    面向对象 -- 三大特性之继承 补充 抽象类 接口类
    面向对象 -- 三大特性之继承
    面向对象 -- 类的组合
  • 原文地址:https://www.cnblogs.com/wu-xw/p/10111597.html
Copyright © 2011-2022 走看看