• day04_键盘操作丶元素等待丶下拉选择框、弹出框、滚动条操作


    键盘操作

    键盘操作主要就是模拟键盘上一些按键或者组合键的输入 如:Ctrl+C 、Ctrl+V。Selenium中把键盘的按键都封装在Keys类中

    常用的键盘操作

    # 导包
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    
    # 实例化浏览器驱动
    driver = webdriver.Chrome()
    driver.maximize_window()
    # 打开测试网站
    driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
    # 1). 输入用户名:admin1,暂停2秒,删除1
    element = driver.find_element(By.ID, 'userA')
    element.send_keys("admin1")
    time.sleep(2)
    element.send_keys(Keys.BACK_SPACE)  # 删除最后一个字符串 clear()
    # 2). 全选用户名:admin,暂停2秒
    element.send_keys(Keys.CONTROL, 'a')
    time.sleep(2)
    # 3). 复制用户名:admin,暂停2秒
    element.send_keys(Keys.CONTROL, 'c')
    time.sleep(2)
    # 4). 粘贴到密码框
    driver.find_element(By.ID, 'passwordA').send_keys(Keys.CONTROL, 'V')
    
    # 等待3S
    time.sleep(3)
    # 退出浏览器驱动
    driver.quit()

    元素等待

    在实际工作中由于网络速度慢丶电脑配置低丶服务器处理请求慢 等待各种原因,造成元素无法及时加载出来。此时我们就要设置元素等待了。元素等待:在定位页面元素时如果未找到,会在指定时间内一直等待的过程

    隐式等待

    • 概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出元素不存在的异常 NoSuchElementException 。 

    # 导包
    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    # 实例化浏览器驱动
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.implicitly_wait(5)  # 隐式等待的时间,设置为5S
    # 打开测试网站
    driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
    # 针对第一个延时框输入admin
    driver.find_element(By.XPATH, "//div[@id='wait']/input[1]").send_keys("admin")
    
    # 针对第二个延时框输入admin2
    driver.find_element(By.XPATH, "//div[@id='wait']/input[2]").send_keys("admin2")
    
    # 等待3S
    time.sleep(3)
    # 退出浏览器驱动
    driver.quit()

    显式等待

    • 概念:定位指定元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出超时异常 TimeoutException 。 

    实现方式

    # 通过显示等待的方式定位延时输入框输入admin
    element = WebDriverWait(driver, 9, 1).until(lambda x: x.find_element(By.XPATH, "//*[@id='wait']/input[1]"))
    element.send_keys("admin")

    显式与隐式区别

    • 作用域:隐式为全局元素,显式等待为单个元素有效
    • 使用方法:隐式等待直接通过驱动对象调用,而显式等待方法封装在WebDriverWait类中
    • 达到最大超时时长后抛出的异常不同:隐式为NoSuchElementException,显式等待为TimeoutException 

    强制等待

    • 强制等待就是让代码休眠,不做任何的操作。time.sleep(time) 

    常用的场景:

    • 当要获取元素的文本内容时,而元素的文本内容是需要通过后台接口请求并渲染的,此时,如果使用隐式等待或显示等待是没有办法获取到文本内容,所以需要使用强制等待
    • 当要操作的元素已经存在,但是有其他的元素需要等待且与该操作的元素有业务关联,如果使用隐式等待或显示等待对该元素进行操作的话,是没有办法进行的,也需要使用强制等待。
    # 获取购物车中的商品数量
    time.sleep(2)
    print("购物车商品数量:", driver.find_element(By.CSS_SELECTOR, "#cart_quantity").text)

    下拉选择框、弹出框、滚动条操作 

    下拉选择框操作

    1. 导入Select类
    2. 实例化select对象 select=Select(element) # element对象表示的是select元素对象
    3. 操作方法: 

    # 导包
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.select import Select
    
    # 实例化浏览器驱动
    
    driver = webdriver.Chrome()
    driver.maximize_window()
    # 打开测试网站
    driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
    element = driver.find_element(By.CSS_SELECTOR, "#selectA")
    select = Select(element)
    # 通过select对象的index来选择广州
    time.sleep(2)
    select.select_by_index(2)
    # 通过select对象的value来选择上海
    time.sleep(2)
    select.select_by_value("sh")
    # 通过select对象的visible来选择深圳
    time.sleep(2)
    select.select_by_visible_text("深圳")
    
    # 等待3S
    time.sleep(3)
    # 退出浏览器驱动
    driver.quit()

    弹出框处理

    网页中常用的弹出框有三种

    • alert             警告框
    • confirm        确认框
    • prompt         提示框

    Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样 

    步骤如下:
    # 导包
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    # 实例化浏览器驱动
    driver = webdriver.Chrome()
    driver.maximize_window()
    # 打开测试网站
    driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
    # 点击alert按钮
    driver.find_element(By.ID, "alerta").click()
    time.sleep(3)
    
    # 获取弹出框
    alert = driver.switch_to.alert
    # 取消弹出框
    alert.dismiss()
    # 在用户名输入框中输入admin
    driver.find_element(By.ID, 'userA').send_keys("admin")
    
    # 等待3S
    time.sleep(3)
    # 退出浏览器驱动
    driver.quit()

    滚动条操作

    应用场景:

    • 在HTML页面中,由于前端技术框架的原因,页面元素为动态显示,元素根据滚动条的下拉而被加载
    • 页面注册同意条款,需要滚动条到最底层,才能点击同意 

    实现方式 

    selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的。 

    # 导包
    import time
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    # 实例化浏览器驱动
    driver = webdriver.Chrome()
    driver.maximize_window()
    # 打开测试网站
    driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")
    time.sleep(3)
    # 控制滚动条到最下方
    # 1、定义js
    js = "window.scrollTo(0, 2000)"
    # 2、执行JS
    driver.execute_script(js)
    # 等待3S
    time.sleep(3)
    # 退出浏览器驱动
    driver.quit()
  • 相关阅读:
    poj2728 Desert King
    bzoj4289 Tax
    洛谷P4141消失之物
    Code Forces 698A Vacations
    Code Forces 543A Writing Code
    洛谷P1133 教主的花园
    poj3177 Redundant Paths
    bzoj1151 动物园
    bzoj1503 郁闷的出纳员
    bzoj1208 宠物收养所
  • 原文地址:https://www.cnblogs.com/wurengen/p/15356413.html
Copyright © 2020-2023  润新知