ui自动化

1.初始化和定位

from selenium import webdriver
import time


# 初始化浏览器
driver = webdriver.Chrome()
# 打开一个网页
driver.get("https://baidu.com")
time.sleep(1)

# 定位
# name
ele01 = driver.find_element_by_name("wd")
ele01.send_keys("test")
# id
ele02 = driver.find_element_by_id("su")
ele02.click()
time.sleep(1)
# xpath
driver.find_element_by_xpath('//*[@id="kw"]').send_keys("test")
time.sleep(1)
# css
driver.find_element_by_css_selector("a>img[alt='到百度首页']").click()
time.sleep(1)
# link text
driver.find_element_by_link_text("关于百度").click()
time.sleep(1)
# partial link text
driver.find_element_by_partial_link_text("out Bai").click()
time.sleep(1)
# class name
driver.find_element_by_class_name("s_ipt").send_keys("test")
time.sleep(1)
# tag name
driver.get("http://192.168.31.99/test.html")
driver.find_element_by_tag_name("textarea").send_keys("test666")
### 复数形式
# driver.find_elements_by_tag_name("a")

   xpath定位方法见:ui自动化之xpath定位-CSDN博客

2.窗口、页面

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://baidu.com")
# 最大化窗口
driver.maximize_window()
time.sleep(1)
# 网页全屏
# driver.fullscreen_window()
# time.sleep(1)
# 最小化浏览器
# driver.minimize_window()
# time.sleep(1)

driver.find_element_by_name("wd").send_keys("test666")
driver.find_element_by_id("su").click()
time.sleep(1)

# 返回上一级
driver.back()
time.sleep(1)

# 前进
driver.forward()
time.sleep(1)

# 刷新
driver.refresh()
time.sleep(1)

driver.back()
time.sleep(0.5)
# 获取窗口标题
print(driver.title)
# 切换窗口
driver.find_element_by_link_text("关于百度").click()
time.sleep(1)
driver.switch_to.window(driver.window_handles[1])
print(driver.current_window_handle) // 获取当前窗口的句柄
print(driver.title)

# 关闭当前窗口
driver.close()
time.sleep(1)

# 退出浏览器
driver.quit()

3.frame相关操作

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://qzone.qq.com/")
driver.maximize_window()
time.sleep(1)

#进入第一层的iframe
driver.switch_to.frame("login_frame")
# driver.switch_to.frame(0)
# driver.switch_to.frame(driver.find_element_by_xpath("//div[@id='login_div']/iframe"))
driver.find_element_by_link_text("帐号密码登录").click()
time.sleep(1)

# 切到父级frame
driver.switch_to.parent_frame()
# 切到主frame
# driver.switch_to.default_content()

driver.find_element_by_xpath("//span[text()='Android']").click()

4.元素的相关操作方法

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

# 点击
driver.find_element_by_xpath("//input[@value='测试单击']").click()
time.sleep(1)
# 输入
driver.find_element_by_css_selector("textarea").send_keys("test666")
time.sleep(1)
# 清空输入框
driver.find_element_by_css_selector("textarea").clear()
time.sleep(1)
# 获取文本内容
# driver.find_element_by_xpath().text

# 判断元素是否可操作
print(driver.find_element_by_xpath("//input[@value='永远点不了的按钮']").is_enabled())  # False
# 判断元素是否被选中,比如单选和复选框
print(driver.find_element_by_xpath("//input[@onclick=\"onclick1('吃花生')\"]").is_selected())  # True
print(driver.find_element_by_xpath("//input[@onclick=\"onclick1('吃瓜子')\"]").is_selected())  # False
# 判断元素是否可见
print(driver.find_element_by_name("fruit").is_displayed())  # True
print(driver.find_element_by_name("fruit-none").is_displayed())  # False

# 在一个元素内找其它元素
driver.find_element_by_xpath("//form/div/div[1]")\
    .find_element_by_xpath("//textarea").send_keys("test test")

# 文件上传
driver.find_element_by_id("file").send_keys("C:/Users/zero/Desktop/test.jpg")

# 获取元素宽高
print(driver.find_element_by_name("t2").size)
# 获取元素的坐标
print(driver.find_element_by_name("t2").location)
# 获取元素的宽高和坐标
print(driver.find_element_by_name("t2").rect)

# 获取元素的指定属性
print(driver.find_element_by_xpath("//img/..").get_attribute("href"))
print(driver.find_element_by_xpath("//img/..").get_property("href"))

5.下拉列表

from selenium import webdriver
from selenium.webdriver.support.select import Select
import time

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

#实例化一个对象
fruit_select = Select(driver.find_element_by_name("fruit"))

# 根据索引选
fruit_select.select_by_index(3)
time.sleep(1)
# 根据value选
fruit_select.select_by_value("a")
time.sleep(1)
# 根据文本选
fruit_select.select_by_visible_text("香蕉")

6.截图

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://baidu.com")
driver.maximize_window()
time.sleep(1)

# 网页截图
driver.save_screenshot("../screenshots/bd.png")

# 元素截图
driver.find_element_by_id("s_lg_img").screenshot("../screenshots/bd_logo.png")
# 获取元素截图的字节形式
bd_logo_bytes = driver.find_element_by_id("s_lg_img").screenshot_as_png
with open("../screenshots/bd_logo_b.png", "wb") as fwb:
    fwb.write(bd_logo_bytes)

7.三种弹框

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

# 处理alert弹框
driver.find_element_by_xpath("//input[@value='点我测试alert弹框']").click()
time.sleep(1)
driver.switch_to.alert.accept()

# 处理confirm弹框
driver.find_element_by_xpath("//input[@value='点我测试confirm弹框']").click()
time.sleep(1)
# driver.switch_to.alert.accept()
driver.switch_to.alert.dismiss()

# 处理prompt弹框
driver.find_element_by_xpath("//input[@value='点我测试prompt弹框']").click()
time.sleep(1)
driver.switch_to.alert.send_keys("test666")
driver.switch_to.alert.accept()
# driver.switch_to.alert.dismiss()

8.键盘操作

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

driver.find_element_by_name("t2").send_keys("test666")
time.sleep(1)
driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "a", "x")
time.sleep(1)
# driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "x")
# time.sleep(1)
driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "v")
driver.find_element_by_name("t2").send_keys(Keys.CONTROL + "v")

9.鼠标操作

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains as AC
import time

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

# 双击、右键点击
AC(driver) \
    .double_click(driver.find_element_by_xpath("//input[@value='测试双击']")) \
    .context_click(driver.find_element_by_xpath("//input[@value='测试右击']")) \
    .perform()
time.sleep(1)

# 鼠标悬浮
driver.get("https://baidu.com")
time.sleep(1)
AC(driver).move_to_element(driver.find_element_by_name("tj_briicon")) \
    .perform()
time.sleep(1)

# 长按
# AC(driver).click_and_hold(driver.find_element_by_xpath("//a[text()='学术']")).perform()
# time.sleep(3)
# AC(driver).release(driver.find_element_by_xpath("//a[text()='学术']")).perform()
# time.sleep(1)

# 拖动元素到另一个元素
driver.get("http://localhost/t.html")
time.sleep(1)
AC(driver) \
    .drag_and_drop(driver.find_element_by_id("box"), driver.find_element_by_id("box1"))\
    .perform()

time.sleep(2)
driver.refresh()
time.sleep(1)

# 把元素根据指定坐标拖动
AC(driver) \
    .drag_and_drop_by_offset(driver.find_element_by_id("box"), 100, 100)\
    .perform()

10.三种等待(强制等待time  隐式等待implicitly 显示等待WebDriverWait)

from selenium import webdriver
import time

driver = webdriver.Chrome()
# 设置十秒的隐式等待
driver.implicitly_wait(10)
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

driver.find_element_by_xpath("//input[@value='测试等待']").click()
driver.find_element_by_id("test_input_01").send_keys("test666")



#显示等待
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait as WDW
import time

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

driver.find_element_by_xpath("//input[@value='测试等待']").click()

# def find_input(driver):
#     return driver.find_element_by_id("test_input_01")

WDW(driver, 10, 0.5) \
    .until(lambda x: x.find_element_by_id("test_input_01")) \
    .send_keys("test666")  # (对象, 最长等待时长, 间隔多久扫描一次)
# driver.find_element_by_id("test_input_01").send_keys("test666")

11.窗口滚动、操作js页面

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://jd.com")
driver.maximize_window()
time.sleep(1)

# 执行js
driver.execute_script("scrollTo(0, 2420)")
time.sleep(3)


# 处理date日期元素
driver.get("http://localhost/test.html")
time.sleep(1)
driver.execute_script("document.querySelector(\"[name='date']\").value = \"2028-01-01\";")

12.无界模式

from selenium import webdriver

# 浏览器配置可以修改浏览器大部分的设置,比如:设置默认下载路径、设置下载询问弹框

# 初始化浏览器配置
options = webdriver.ChromeOptions()
# 加入无头配置
options.add_argument("--headless")
# 初始化浏览器并加入配置
driver = webdriver.Chrome(options=options)

driver.get("http://192.168.31.99")

13.非常规文件上传

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains as AC
import time
from pykeyboard import PyKeyboard
import pyperclip

driver = webdriver.Chrome()
driver.get("http://localhost/test.html")
driver.maximize_window()
time.sleep(1)

AC(driver).click(driver.find_element_by_id("file")).perform()
time.sleep(3)

# 操作键盘
kb = PyKeyboard()
pyperclip.copy(r"C:\Users\sss\Desktop\docs\test - 副本.jpg")

# # 单击shift切换到英文输入法
# kb.tap_key(kb.shift_key)
# # 输入文件路径
# kb.type_string(r"C:\Users\sss\Desktop\docs\test - 副本.jpg")

# 按下Ctrl + v
kb.press_keys([kb.control_key, "v"])

# 单击回车
kb.tap_key(kb.enter_key)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值