day03_元素丶浏览器丶鼠标丶键盘等常用操作

 元素的操作

  • 点击操作 element.click() :element表示的是元素对象
  • 输入操作 element.send_keys("value") :element表示的是元素对象, value表示的是要输入的内容
  • 清除操作 element.clear(): element表示的是元素对象. 将输入框里面的内容全部清除。

day03_元素丶浏览器丶鼠标丶键盘等常用操作

浏览器常见的操作

操作浏览器窗口大小

  • maximize_window() 最大化浏览器窗口 --> 模拟浏览器最大化按钮 实例化浏览器驱动之后,就可以调用窗口最大化的方法
  • set_window_size(width, height) 设置浏览器窗口大小 -->  设置浏览器宽、高(像素点)
  • set_window_position(x, y) 设置浏览器窗口位置 --> 设置浏览器位置.x,y是一个坐标点,通过此坐标点确定浏览器最左上角的位置,以此确定浏览器在屏幕上的位置。x, y不能超过屏幕的分辨率大小
# 导包
import time
from selenium import webdriver

driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 打开测试网站
driver.get("https://www.baidu.com/?tn=49055317_10_hao_pg")
time.sleep(3)
# 设置窗口大小
driver.set_window_size(500, 500)
time.sleep(3)
# 设置窗口位置
driver.set_window_position(300, 300)

# 等待3S
time.sleep(3)
# 退出
driver.quit()

浏览器的页面的操作

  • back() 后退 --> 模拟浏览器后退按钮
  • forward() 前进 --> 模拟浏览器前进按钮
  • refresh() 刷新 --> 模拟浏览器F5刷新
  • close() 关闭当前窗口 --> 模拟点击浏览器关闭按钮
  • quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口
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")
# 在注册A页面中点击 新浪网站
driver.find_element(By.CSS_SELECTOR, "#linkto>a").click()
# 调用浏览器的后退
time.sleep(3)
driver.back()
# 再调用浏览器的前进
time.sleep(3)
driver.forward()
# 再调用浏览器的后退
time.sleep(3)
driver.back()
# 点击击访问新浪网站
driver.find_element(By.XPATH, "//*[text()='访问 新浪 网站']").click()
time.sleep(3)
# 再调用关闭按钮
driver.close()
time.sleep(3)
# 等待3S
time.sleep(3)
# 退出
driver.quit()
  • title 获取页面title
  • current_url 获取当前页面URL
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")

# 获取页面标题
print(driver.title)

# 获取页面的URL地址
print(driver.current_url)

# 等待3S
time.sleep(3)
# 退出
driver.quit()

获取元素信息

学习获取元素信息的方法,主要为了获取相关的信息进行断言,判断自动化用例最终的执行结果。

获取元素常用的方法:

  • size 获取元素的大小 返回的是一个字典,里面包含 元素高度和宽度的值
  • text 获取元素的文本内容
  • get_attribute("attribute") 获取元素对应属性名称的属性值 , attribute表示的是属性名
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# 窗口最大化
driver.maximize_window()
# 打开对应url
driver.get("file:///C:/Users/Administrator/Desktop/pagetest/%E6%B3%A8%E5%86%8CA.html")

# 1).获取用户名输入框的大小
print(driver.find_element(By.ID, "userA").size)
# 2).获取页面上第一个超链接的文本内容
print(driver.find_element(By.LINK_TEXT, "新浪").text)
# 3).获取页面上第一个超链接的地址
print(driver.find_element(By.LINK_TEXT, "新浪").get_attribute("href"))
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
  • is_displayed() 判断元素是否可见 返回值为true或者false
  • is_enabled() 判断元素是否可用,返回值为true或者false
  • is_selected() 判断复选框或者单选框是否被选中,返回值为true或者false
# 4).判断页面中的span标签是否可见
print("判断元素是否可见,默认应该是False:", driver.find_element(By.NAME, "sp1").is_displayed())
# 5).判断页面中取消按钮是否可用
print("判断取消按钮是否可用,默认应该是False:", driver.find_element(By.ID, "cancelA").is_enabled())
# 6).判断页面中'旅游'对应的复选框是否为选中的状态
print("判断旅游复选框是否选中,默认应该是True:", driver.find_element(By.ID, "lyA").is_selected())

鼠标常用操作

前提:需要导入ActionChains类

selenium提供鼠标操作的方法及步骤

  1. 通过ActionChains实例化鼠标对象 action = ActionChains(driver) # driver表示的是浏览器驱动对象
  2. 调用鼠标的事件方法
  3. 调用鼠标的执行方法 action.perform()

调用鼠标的事件方法,常见的如下:

  • 鼠标右击事件方法 action.context_click(element) # element表示的是一个元素对象
# 导包
import time
from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.maximize_window()
# 打开测试网站
driver.get("file:///D:/software/pagetest/%E6%B3%A8%E5%86%8CA.html")

# 在用户名文本框上点击鼠标右键
# 创建鼠标对象
action = ActionChains(driver)
# 调用鼠标右击的方法
action.context_click(driver.find_element(By.ID, "userA"))
# 调用鼠标执行的方法
action.perform()
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
  • 鼠标双击事件方法 action.double_click(element) # element表示是元素对象
# 输入用户名admin,暂停3秒钟后,双击鼠标左键,选中admin
element = driver.find_element(By.ID, "userA")
element.send_keys("admin")
time.sleep(3)
# 创建鼠标对象
action = ActionChains(driver)
# 调用鼠标双击事件方法
action.double_click(element)
# 调用鼠标执行方法
action.perform()
  • 鼠标拖动事件方法 action.drag_and_drop(source, target) # source表示的是源元素,被拖动的元素, target表示是目标源,也就是要拖动到哪个元素上。
# 把红色方框拖拽到蓝色方框上
source = driver.find_element(By.ID, "div1")
target = driver.find_element(By.ID, "div2")
# 实例化鼠标对象
action = ActionChains(driver)
# 调用鼠标拖动事件方法
action.drag_and_drop(source, target)
# 调用鼠标执行方法
action.perform()
  • 鼠标悬停事件方法 action.move_to_element(element) # element表示的是元素对象
# 模拟鼠标悬停在‘注册’按钮上
element = driver.find_element(By.CSS_SELECTOR, "button")
# 创建鼠标对象
action = ActionChains(driver)
# 调用鼠标悬停事件方法
action.move_to_element(element)
# 调用鼠标执行方法
action.perform()
  • 鼠标单元素拖动事件方法 action.drag_and_drop_by_offset(element, x, y): x, y 表示的元素拖动时横向和纵向移动的距离,单位为像素, element表示的是元素对象 移动的像素最终要比在web页面中看到的移动像素值要大,最好大于5个像素或者10像素
# 模拟鼠标实现滑块验证码的操作
element = driver.find_element(By.CSS_SELECTOR, '.handler_bg')
# 创建鼠标对象
action = ActionChains(driver)
# 调用鼠标单元素拖动事件方法
action.drag_and_drop_by_offset(element, 265, 0)
# 调用鼠标执行方法
action.perform()

键盘常用操作

  • 前提:需要导入Keys类, 第一个字母是大写
  • 目的:模拟键盘上面的快捷键的操作
  • 方法:调用键盘操作的快捷键的方法 element.send_keys(快捷键的键值)

注意:

  • 单键值:直接传入对应的键值
  • 组合键:键值之间由逗号分隔

day03_元素丶浏览器丶鼠标丶键盘等常用操作

# 导包
import time

from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver import ActionChains
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")

element.send_keys(Keys.BACK_SPACE)  # 删除最后一个字符串 clear()
# 2). 全选用户名:admin,暂停2秒
element.send_keys(Keys.CONTROL, 'a')

# 3). 复制用户名:admin,暂停2秒
element.send_keys(Keys.CONTROL, 'c')

# 4). 粘贴到密码框
driver.find_element(By.ID, 'passwordA').send_keys(Keys.CONTROL, 'V')

# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()
# 导包
import time

from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver import ActionChains
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")

element.send_keys(Keys.BACK_SPACE)  # 删除最后一个字符串 clear()
# 2). 全选用户名:admin,暂停2秒
element.send_keys(Keys.CONTROL, 'a')

# 3). 复制用户名:admin,暂停2秒
element.send_keys(Keys.CONTROL, 'c')

# 4). 粘贴到密码框
driver.find_element(By.ID, 'passwordA').send_keys(Keys.CONTROL, 'V')

# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

元素等待

HTML加载需要时间,影响HTML加载的因素:

  • 服务器性能
  • 网络速度
  • 本身电脑的配置

隐式等待

概念:首先要等待整个页面加载完成,再去进行元素定位,如果在定位过程中找到了元素,直接返回该元素,继续后面的操作,如果在指定的时间内没有找到该元素,那么每隔0.5秒再去找,如果超过了指定时间,就会抛出NoSuchElementException的异常错误。

实现方式:

day03_元素丶浏览器丶鼠标丶键盘等常用操作

# 导包
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
print("开始时间:", time.strftime("%H:%M:%S"))
driver.find_element(By.XPATH, "//div[@id='wait']/input[1]").send_keys("admin")
print("找到第一个元素的时间:", time.strftime("%H:%M:%S"))
# 针对第二个延时框输入admin2
driver.find_element(By.XPATH, "//div[@id='wait']/input[2]").send_keys("admin2")
print("找到第二个元素的时间:", time.strftime("%H:%M:%S"))

# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

显示等待(推荐使用)

概念:定位指定元素时,如果能找到该元素,那么就直接返回该 元素,如果找不到,那么每隔指定的时间再去定位该 元素,如果超出最长等待时间,那么就抛出TimeOutException。

实现方式:

day03_元素丶浏览器丶鼠标丶键盘等常用操作

# 导包
import time

from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

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
element = WebDriverWait(driver, 9, 1).until(lambda x: x.find_element(By.XPATH, "//*[@id='wait']/input[1]"))
element.send_keys("admin")
# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

显示等待与隐式等待的区别:

  • 抛出的异常不一样 , 隐式等待超时,报的NoSuchElementException ,显示等待超时,报的是 TimeOutException
  • 作用域不一样, 隐式等待对所有元素定位的方法都有效,只需要定义一次, 显示等待只针对单个元素
  • 显示等待不需要等待整个页面的HTML的DOM树加载完成,显式等待的效率更高,工作当中一般使用显示等待。而隐式等待需整个HTML DOM树加载完成。

强制等待

  • 概念:强制等待就是让代码休眠,不做任何的操作
  • 方法:time.sleep(time) 单位为time

常用的场景:

  • 当要获取元素的文本内容时,而元素的文本内容是需要通过后台接口请求并渲染的,此时,如果使用隐式等待或显示等待是没有办法获取到文本内容,所以需要使用强制等待
  • 当要操作的元素已经存在,但是有其他的元素需要等待且与该操作的元素有业务关联,如果使用隐式等待或显示等待对该元素进行操作的话,是没有办法进行的,也需要使用强制等待。
# 导包
import time

from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(5)
driver.get("http://tpshop-test.itheima.net/")

# 先登录
driver.find_element(By.CSS_SELECTOR, '.red').click()
# 输入用户名密码等信息
driver.find_element(By.CSS_SELECTOR, "#username").send_keys("13012345678")
driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345678")
driver.find_element(By.CSS_SELECTOR, "#verify_code").send_keys("8888")
driver.find_element(By.CSS_SELECTOR, ".J-login-submit").click()

# 获取购物车中的商品数量
time.sleep(2)
print("购物车商品数量:", driver.find_element(By.CSS_SELECTOR, "#cart_quantity").text)

# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

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

下拉选 择实现步骤:

  1. 导入Select类
  2. 实例化select对象 select=Select(element) # element对象表示的是select元素对象
  3. 通过select的相关方法选择option选项

day03_元素丶浏览器丶鼠标丶键盘等常用操作

# 导包
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:///D:/software/UI%E8%87E5%8C%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()

弹出框操作

day03_元素丶浏览器丶鼠标丶键盘等常用操作

弹出框处理方法 

day03_元素丶浏览器丶鼠标丶键盘等常用操作

# 导包
import time

from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
# 打开测试网站
driver.get("file:///D:/software/UI%%88/pagetest/%E6%B3%A8%E5%86%8CA.html")
# 点击alert按钮
driver.find_element(By.ID, "alerta").click()
time.sleep(3)
# 处理弹出框
# 获取弹出框
alert = driver.switch_to.alert
# 打印信息,然后取消
print(alert.text)
alert.dismiss()
# 在用户名输入框中输入admin
driver.find_element(By.ID, 'userA').send_keys("admin")

# 等待3S
time.sleep(3)
# 退出浏览器驱动
driver.quit()

滚动条操作

day03_元素丶浏览器丶鼠标丶键盘等常用操作

实现步骤:

day03_元素丶浏览器丶鼠标丶键盘等常用操作

# 导包
import time

from selenium import  webdriver
# 实例化浏览器驱动
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()
# 打开测试网站
driver.get("file:///D:/software/UI%EE5%8/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()
上一篇:Day03 知识点总结


下一篇:Java基础 day03