三、UI自动化交互操作

交互操作

用户操作

  • 点击
    • element.click()
  • 输入
    • element.send_keys(值)
  • 清除
    • element.clear()
'''
tpshop首页, 所搜框输入华为, 点击搜索按钮
tpshop首页, 所搜框输入小米, 点击搜索按钮
'''
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("http://hmshop-test.itheima.net/")
driver.find_element(By.ID, "q").send_keys("华为")
driver.find_element(By.CLASS_NAME, "ecsc-search-button").click()
time.sleep(5)
driver.find_element(By.ID, "q").clear() # 把上面输入的华为清空
driver.find_element(By.ID, "q").send_keys("小米")
driver.find_element(By.CLASS_NAME, "ecsc-search-button").click()
time.sleep(10)
driver.quit()

获取元素信息

  • 获取元素大小

    • element.size
  • 获取元素文本

    • element.text
  • 获取元素指定属性值

    • element.get_attribute("属性名")
  • 判断元素是否可见

    • element.is_displayed()
  • 判断元素是否可用

    • element.is_enabled()
  • 判断元素是否被选中

    • element.is_selected()
# 注册页面
driver.get("http://tpshop.com/Home/user/reg.html")
element = driver.find_element_by_class_name("J_protocal")
print(element.size,
      element.get_attribute("type"),
      element.is_enabled(),
      element.is_displayed(),
      element.is_selected())
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("http://hmshop-test.itheima.net/")
element = driver.find_element(By.CLASS_NAME, "ecsc-search-button")
print(element.text) # 显示元素表面的文本信息
print(element.size) # 显示元素的大小
print(element.get_attribute('type')) # 显示元素type属性的值
if element.is_displayed(): # 判断这个元素是否可见
    print("元素是可见的")
time.sleep(10)
driver.quit()

浏览器操作

  • 窗口最大化

    • driver.maximize_window()
  • 窗口最小化

    • driver.minimize_window()
  • 设置窗口大小

    • driver.set_window_size(400, 600)
  • 设置窗口位置

    • driver.set_window_position(300, 200)
  • 后退

    • driver.back()
  • 前进

    • driver.forward()
  • 刷新

    • driver.refresh()
  • 关闭当前窗口

    • driver.close()
  • 窗口标题

    • driver.title
  • 窗口当前URL

    • drvier.current_url
  • 关闭浏览器

    • driver.quit()
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.get("http://www.taobao.com")
driver.back()  # 回到上一个URL, 操作的结果是回到了百度
time.sleep(3)
driver.forward() # 前进到下一个URL, 操作的结果是前进到了淘宝
time.sleep(3)
driver.refresh() # 点击了浏览器的刷新按钮
time.sleep(3)
driver.quit()
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
print(driver.current_url) # 用print显示这个浏览器当前的url
print(driver.title) # 用print显示浏览器的标题
driver.quit()
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element(By.LINK_TEXT, "hao123").click()
time.sleep(3)
driver.close() # 关闭当前浏览器窗口, 如果没有代码单独干预, 当前窗口永远是第一个打开的窗口
time.sleep(5)
driver.quit() # 不管有多少个窗口, 直接关闭浏览器

下拉框

  • 根据下标索引
    • select_by_index(索引值)
  • 根据value属性值
    • select_by_value(值)
  • 根据文本
    • select_by_visible_text(值)
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.get("http://tpshop.com/test/form.html")
element = driver.find_element_by_name("select1")
select = Select(element)
select.select_by_index(3)
# select.select_by_value("北京")
# select.select_by_visible_text("广州")

自定义弹窗

  • 弹窗出现后, 依然可以通过浏览器调试功能定位元素
    • 处理自定义弹窗的代码普通用find_element即可, 不需要做其他特殊操作
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import time
driver = webdriver.Chrome()
driver.maximize_window()  # 实例化浏览器对象后, 先把浏览器最大化
driver.get("http://hmshop-test.itheima.net/Home/user/login.html")
driver.find_element(By.ID, "username").send_keys("13912121212")
driver.find_element(By.ID, "password").send_keys("1231312")
driver.find_element(By.ID, "verify_code").send_keys("8888")
driver.find_element(By.NAME, "sbtbutton").click()
time.sleep(2)
driver.find_element(By.LINK_TEXT, "确定").click()

time.sleep(5)
driver.quit() # 不管有多少个窗口, 直接关闭浏览器

js弹窗

  • 弹窗出现后, 浏览器处于阻塞状态, 不能通过浏览器调试功能定位元素

  • 切换到弹出框

    • alert = driver.switch_to.alert
  • 获取弹出框文本

    • alert.text
  • 点击弹出框确定按钮

    • alert.accept()
  • 点击弹出框取消按钮

    • alert.dismiss()
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.maximize_window()  # 实例化浏览器对象后, 先把浏览器最大化
driver.get(r"file://c:\file\form.html")

driver.find_element(By.CSS_SELECTOR, "input[value='confirm']").click()
time.sleep(2)
alert = driver.switch_to.alert  # 让代码切换到js弹窗中
print(alert.text)  # 显示js弹窗的文本
alert.accept() # 点击js弹窗的确定按钮
# alert.dismiss() # 点击js弹窗的取消按钮

time.sleep(5)
driver.quit() # 不管有多少个窗口, 直接关闭浏览器

滚动条

  • 滚动textarea的滚动条
    • 调用driver的execute_script执行js脚本实现对textarea滚动
    • "document.getElementById('txt2').scrollTo(0,1000);"
driver.get("http://tpshop.com/test/form.html")
js = "document.getElementById('txt2').scrollTo(0,1000);"
driver.execute_script(js)
  • 滚动浏览器页面滚动条
    • 调用driver的execute_script执行js脚本实现对textarea滚动
    • "window.scrollTo(0,1000)"
driver.get("http://tpshop.com")
js = "window.scrollTo(0,1000)"
driver.execute_script(js)

鼠标操作

  • 导入ActionChains包
  • 实例化ActionChains的对象
    • action = ActionChains(driver)
  • 鼠标操作
    • action.move_to_element(element) # 鼠标悬停
    • action.context_click(element) # 鼠标右键
    • action.double_click(element) # 鼠标双击
    • action.drag_and_drop(src_element, dest_element) # 鼠标拖拽
  • 执行鼠标操作
    • action.perform()
from selenium.webdriver import ActionChains
# 首页鼠标选定在商品分类的电脑分类
# 首页鼠标悬停在商品分类的电脑分类
driver.get("http://tpshop.com")
action = ActionChains(driver)
element = driver.find_element_by_link_text("电脑")
action.move_to_element(element) # 鼠标悬停
# action.context_click(element) # 鼠标右键
# action.double_click(element) # 鼠标双击
# src_element = driver.find_element_by_link_text("登录")
# dest_element = driver.find_element_by_link_text("预售")
# action.drag_and_drop(src_element, dest_element) # 鼠标从登录链接到预售链接拖拽
action.perform()

总结

image

posted @ 2022-05-24 16:24  鬼谷仙生  阅读(164)  评论(0编辑  收藏  举报