• Web 自动化测试(Selenium) 鼠标和键盘操作以及浏览器等待


    目录

      1. 鼠标和键盘操作

        1.1 鼠标

        1.2 键盘

      2. 浏览器等待

        2.1 为什么要进行等待

        2.2 selenium 中等待的分类

    1. 鼠标和键盘操作

      1.1 鼠标

        手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供

        导入动作链类,动作链可以储存鼠标的动作,并一起执行

        from selenium.webdriver import ActionChains

        ActionChains(driver)

        鼠标右击

        el = driver.find_element_by_xxx(value)

        context_click(el)

        对el执行右击

        执行ActionChains中储存的所有动作

        perform()

        例如

        ActionChains(driver).context_click(ele).perform()---->点击鼠标右键

        ActionChains(driver). double_click(ele).perform()---->点击鼠标左键

        ActionChains(driver).move_to_element(el).perform()---->鼠标悬停

    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    
    # 第一种
    # gengduo = driver.find_element_by_link_text("更多")
    # gengduo.click()
    # 第二种
    # gengduo = driver.find_element_by_link_text("更多")
    # ActionChains(driver). double_click(gengduo).perform()   # 鼠标左键点击
    
    # kongbai = driver.find_element_by_id("head_wrapper")
    # ActionChains(driver).context_click(kongbai).perform()    # 鼠标右键点击
    
    baidulogo = driver.find_element_by_id("s_lg_img")      # 百度页面的logo
    ActionChains(driver).move_to_element(baidulogo).perform()    # 鼠标悬停

      1.2 键盘

      常用键盘操作

      send_keys(Keys.CONTROL,‘a’) ------>全选(ctrl+a)

      send_keys(Keys.CONTROL,‘x’) ------>剪切(ctrl+x)

      send_keys(Keys.CONTROL,‘v’) ------>粘贴(ctrl+v)

      send_keys(Keys.F1)-------->键盘F1
      …
      send_keys(Keys.F12)-------->键盘F12
      

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    
    driver = webdriver.Firefox()
    
    driver.get("http://www.baidu.com")
    
    inp = driver.find_element_by_id("kw")
    inp.send_keys("123")
    
    # inp.send_keys(Keys.BACK_SPACE)   # 删除键
    # inp.send_keys(Keys.SPACE)     # 空格键
    # inp.send_keys(Keys.TAB)    # 制表键
    # inp.send_keys(Keys.ESCAPE)  # 回退键
    # inp.send_keys(Keys.ENTER)   # 回车键
    # inp.send_keys(Keys.CONTROL,"a")  # 全选
    inp.send_keys(Keys.CONTROL,"x")  # 剪切
    inp.send_keys(Keys.CONTROL,"v")  # 粘贴
    inp.send_keys(Keys.F1)  # 键盘F1
    inp.send_keys(Keys.F12)  # 键盘F12

    2. 浏览器等待

      2.1 为什么要进行等待

        1)网速慢

        2)网站内容过多

        3)如果不进行等待而直接定位元素,可能会抛出异常

      2.2 selenium 中等待的分类

        优先 隐式等待 次之 显示等待 最次 固定等待

        1)显示等待

        显示等待是根据条件进行等待,等待条件出现

        实现:

        from selenium.webdriver.common.by import By

        from selenium.webdriver.support.ui import WebDriverWait

        from selenium.webdriver.support import expected_conditions as EC

        WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

        WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。

        WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,“g-hu”)))

        2)隐式等待

        隐式等待是根据事件进行等待,等待特定时间

        driver.implicitly_wait(n)

        n的单位为秒,n为最大值,在这个最大值内只要该界面上的全部元素都加载完成定就结束没有加载出元素就抛出NosuchException

        3)固定等待

        time模块

        time.sleep()

        优先 隐式等待 次之 显式等待 最次 固定等待

    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get("http://www.baidu.com")
    ele = driver.find_element_by_id("kw")
    ele.send_keys(123)
    # # 固定等待
    # import time
    # time.sleep(23)
    # ele_btn = driver.find_element_by_id("su")
    # ele_btn.click()
    
    # # 显示等待
    # from selenium.webdriver.common.by import By
    # from selenium.webdriver.support.ui import WebDriverWait
    # from selenium.webdriver.support import expected_conditions as EC
    #
    # WebDriverWait(driver,20,0.5).until(EC.presence_of_element_located((By.ID,"su")))
    # ele_btn = driver.find_element_by_id("su")
    # ele_btn.click()
    
    # 隐式等待
    driver.implicitly_wait(20)
    ele_btn = driver.find_element_by_id("su")
    ele_btn.click()
  • 相关阅读:
    【css】容器撑满浏览器--- height:100%
    【实践】js六道有趣的题
    【Canvas】树冠
    asp.net上传Excel文件到服务端进行读取
    HttpContext.Current多线程调用
    abstract修饰符,具体类与抽象类的区别
    如何快速恢复MyEclipse的默认主题
    日历源代码
    for语句应用:乘法表
    Java的优先级
  • 原文地址:https://www.cnblogs.com/xinzaiyuan/p/14647213.html
Copyright © 2020-2023  润新知