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()
原文地址:https://www.cnblogs.com/wurengen/p/15356413.html