selenium 常用方法

 

 

 

一:八大元素定位,主要讲比较常用到的几种

  1. id 实例: driver.find_element_by_id("username").click
  2. class  实例:driver.find_element_by_class_name("username").click
    注意:多个元素共用一个class,如果像列表内有多个按钮这种,需要操作某个按钮。可以先获取class内的所有元素,然后进行下标的方式去操作某个元素。如果需要都点击一遍,可以把返回值做一个循环操作。
  3. name  实例:driver.find_element_by_id("username").click
  4. xpath(万能,重点)实例: driver.find_element_by_xpath("/html/body/div/ul[2]/li[1]").click
  5. css(万能,重点)实例: driver.find_element_by_css_selector("body > div > ul > li:nth-child(2)").click

二:浏览器的操作

  • 最大化,最小化
    driver.maximize_window()  # 最大化浏览器

   driver.minimize_window() # 最小化浏览器

  • 获取标签页的title、url

    driver.title #获取当前标签页的title

    driver.current_url #获取当前标签页的url

    driver.name # 获取当前浏览器的名称

  • 浏览器前进、后退、刷新

    driver.forward()  # 前进

    driver.back()  # 后退

    driver.refresh()  # 刷新

  • 打开、关闭新标签页
  •    # 获取当前标签页句柄
       driver.current_window_handle

       # 获取浏览器所有标签页句柄
       handles = driver.window_handles

       # 切换标签页
       driver.switch_to.window(handles[-1])

       # 关闭当前标签页
       driver.close()

    • 控制浏览器滚动条

      driver.execute_script("window.scrollBy(0,1000)")

      x:必传,正数则向右滑动的像素值,负数则向左滑动的像素值

      y:必传,正数则向下滑动的像素值,负数则向上滑动的像素值

    三:元素常见操作

    • 元素是否可见

      # 找到 可见元素
      ant_btn3 = driver.find_element_by_class_name("ant-btn3")
      ant_btn3.is_displayed()
      某个元素若有 display:none 的样式则是不可见,否则就是可见

  • 元素是否可点击

    # 找到 可点击元素
    ant_btn3 = driver.find_element_by_class_name("ant-btn1")
    ant_btn3.is_enabled()
    某个元素若有 disabled 属性则是不可点击,否则就是可点击

  • 元素是否已被选中

    # 找到 未被选中的元素
    option1 = driver.find_elements_by_tag_name("option")[0]
    option1.is_selected()
    某个元素若有 selected 属性则是已被选择

  • 表单提交

    # 找到搜索框
    search_text = driver.find_element_by_id('kw').send_keys('JC')

    # 提交表单
    search_text.submit()

    submit() 方法用于提交表单。
    实际场景:在搜索框输入关键字之后的“回车” 操作, 就可以通过该方法模拟

  • 四:鼠标操作

    • 鼠标左键、右键单击、双击,或者通过 js 实现

      from selenium.webdriver import ActionChains
      # 创建实例
      chains = ActionChains(driver)
      # 登录按钮
      username = driver.find_element_by_id("username")
      password = driver.find_element_by_id("password")

      # 左键点击
      chains.click(username).perform()

      # 右键点击
      chains.context_click(username).perform()

      # 双击
      chains.double_click(password).perform()

  • 鼠标悬停

    # 悬停到设置按钮
    chains.move_to_element(login_btn).perform()

  • 调用execute_script(),通过js实现
    # 有时元素定位到,但点击无效,用该方法可以。。。
    driver.execute_script("arguments[0].click();", username )
  • 五:键盘操作

    • # 找到搜索框
      inputElement = driver.find_element_by_id("kw")

  • # 输入搜索内容
    inputElement.send_keys("小菠萝测试笔记")

  • # ctrl+a全选
    inputElement.send_keys(Keys.CONTROL, "a")

  • # ctrl+c 复制输入框内容
    inputElement.send_keys(Keys.CONTROL, 'c')

  • # ctrl+x 剪切输入框内容
    inputElement.send_keys(Keys.CONTROL, 'x')

  • # ctrl+x 剪切输入框内容
    inputElement.send_keys(Keys.CONTROL, 'x')

  •  # ctrl+v 粘贴输入框内容

    inputElement.send_keys(Keys.CONTROL, 'v')

  •  # 空格键

    inputElement.send_keys(Keys.SPACE)

  •  # 后退键

    inputElement.send_keys(Keys.BACKSPACE)

  •  # tab键

    inputElement.send_keys(Keys.TAB)

  •  # 回车键

    inputElement.send_keys(Keys.ENTER)

  •  # 刷新页面

    inputElement.send_keys(Keys.F5)

  • 如果定位不到元素,如上传弹窗。可以使用以下两个库直接操作鼠标和键盘
    pymouse(鼠标对象),
    pykeyboard(键盘对象)
  • 六:显示等待、隐性等待、强制等待

    • 强制等待
      调用sleep() 
      缺点:指定等待时间,即时元素被加载出来,也需要等待指定时间结束。会浪费时间,导致脚本的执行时间变长。

    • 显性等待(针对指定元素生效,不需要等待其他无关文件加载完成)推荐使用
      调用方法:
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.wait import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      

    &npse;driver = webdriver.Chrome(“…/resources/chromedriver.exe”)

    # 访问网址
    driver.get(“http://www.baidu.com”)

    # =显式等待=

    # 设置元素等待实例,最多等10秒,每0.5秒查看条件是否成立
    element = WebDriverWait(driver, 10, 0.5).until(
    # 条件:直到元素加载完成
    EC.presence_of_element_located((By.ID, “kw”))
    )

  • 隐性等待(可设置成全局变量,对webdriver 生命周期影响)
    隐性等待体现:如果在规定时间内,整个网页都加载完成,则执行下一步,否则会抛出异常 

    调用方法:

    # ===隐性等待20s===
    driver.implicitly_wait(20)
    缺点:在规定的时间内,页面加载完成(标签页小圈不再转)才能执行下一步,但有可能页面未加载完成,但元素已加载完成受制于某些js和图片原因,必须要等到全部加载完才能下一步,增加了不必要的加载时间。

  • 七:切换ifarme 与 屏幕截图

    • 切换到iframe:

      iframe1 = driver.find_element_by_id("iframe1")

      driver.switch_to.frame(iframe1)

  • 切换回主页面:

    driver.switch_to.default_content()

  • # 截取整个页面,最好保存为png 格式:

    driver.get_screenshot_as_file("E:\\test.png") # 保存在绝对路径下
    driver.save_screenshot("tests.png") # 保存在相对路径下

  • 八:alert窗口处理(警告框、确认框、对话框)

    • div弹窗(可能是弹窗,带有蒙层)
      ?
      1
      2
      #切换到弹窗
      alert = driver.switch_to.alert
    • 警告提示框(必须先关闭,用户才能操作。会提示有确认按钮)
      # 警告框
      alert1 = driver.find_element_by_id("bu1")
      # 先点击,得先弹出警告框
      alert1.click()
      # 切换至警告框
      alert1 = driver.switch_to.alert
      # 点击 确定
      alert1.accept()
    • 确认消息框(跟警告框类似,多了取消按钮)
      alert2 = driver.find_element_by_id("bu2")
      alert2.click()
      # 切换至对话框
      alert2_ = driver.switch_to.alert
      # 点击 取消
      alert2_.dismiss()
      # 点击 确认
      # alert2_.accept()
    • 对话框(需要定位文本按钮。进入文本框内进行输入,然后确认响应)
      alert3 = driver.find_element_by_id("bu3")
      alert3.click()
      # 切换至对话框
      alert3_ = driver.switch_to.alert
      # 输入值到对话框中
      alert3_.send_keys("输入对话框")
      # 点击 确认
      alert2_.accept()

       # 点击取消按钮

       alert_element.dismiss()

       

    十:Select下拉框的操作

    • 返回选项&选中操作
      from selenium.webdriver.support.select import Select
      # 找到select标签元素
      pro = Select(driver.find_element_by_id("pro"))
      # 返回所有选项
      for option in pro.options:
          print(option.text)
      # 返回所有被选中的选项
      for option in pro.all_selected_options:
          print(option.text)
      # 通过value选中
      pro.select_by_value("bj")
      

    # 通过index选中
    pro.select_by_index(1)
    # 通过标签文本选中
    pro.select_by_visible_text(“广东”)

  • 取消选中操作
    # 找到id=city的下拉框
    city = Select(driver.find_element_by_id("city"))
    # 全选
    for option in city.options:
        if not option.is_selected():
            city.select_by_visible_text(option.text)
    # 根据value取消选中
    city.deselect_by_value("bj")
    # 根据index取消选中
    city.deselect_by_index(0)
    # 根据标签文本选中
    city.deselect_by_visible_text("武汉")
    # 全选
    for option in city.options:
        if not option.is_selected():
            city.select_by_visible_text(option.text)
    # 取消选中所有选项
    city.deselect_all()
  • 十一:上传文件的方式

    • input标签 方式:直接元素定位输入路径上传即可
    • 非jinput标签:1、可以使用win32gui 方式定位到上传的弹窗;2、使用SendKeys 直接向焦点内输入,键盘回车等操作。

    十二:判断元素是否存在DOM树?
      方式一:find_element + try- except

    • 直接使用find_element 获取元素,结合try-except 捕获异常
    • 因为如果找不到元素肯定会报错,报错就可以捕获到,知道元素不存在
      def find_element_by_try_except(locator):
          try:
              driver.find_element(*locator)
              return True
          except Exception as msg:
              print("元素%s找不到:%s" % (locator, msg))
              return False

      方式二:find_elements 

    • 使用find_elements获取元素,返回一个数组。判断数组的长度是否<1,如小于1则确认元素不存在
      def find_element_by_try_except(locator):
          eles = driver.find_elements(*locator)
          if len(eles) < 1:
              return False
          else:
              return True

      方式三:webdriverwait + expected_conditions(显性等待(智能等待)的意思)

    • 导入expected_conditions 类 
    • 然后调用presence_of_element_located 方法结合webdriverwait  定位元素

      如返回False 则 不存在,返回webelement 元素则存在

    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.support.ui import WebDriverWait
    

    element = WebDriverWait(driver, 30, 1).until(
      EC.presence_of_element_located(locator)
    )           

       



    十三:js定位与jquery定位

    • js定位五种
      ?
      1
      2
      3
      4
      5
      基本语法:<br>document.getElementById()
      document.getElementsByName()
      document.getElementsByTagName()
      document.getElementsByClassName()
      document.querySelectorAll()
    •  jquery定位 

      ?
      1
      $(selector).action()

        


        



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值