一、元素操作和元素信息获取
1.元素操作 click send_keys clear
2.获取元素信息:
(1)获取元素大小 元素.size
(2)获取元素文本 元素.text
(3)获取元素属性值 元素.get_attribue(属性名'')
--------------4 5 6 返回值:bool--------------
(4)判断元素是否可见 元素.is_displayed()
(5)判断元素是否可用 元素.is enabled()
(6)判断元素是否选中 元素.is selected()
python
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 1.打开浏览器 --实例化浏览器
driver=webdriver.Chrome()
# 2.输入url
driver.get("http://60.204.225.104")
# 3.1获取用户名输入框的大小
element_size= driver.find_element(By.XPATH,"//input[@placeholder='账号']").size
print(element_size)
# 3.2判断页面中的span标签是否可见
is_seen=driver.find_element(By.CSS_SELECTOR,"span").is_displayed()
print(is_seen)
# 3.3判断第一个按钮是否可点击
is_clickable=driver.find_element(By.CSS_SELECTOR,"button").is_displayed()
print(is_clickable)
# 4.关闭浏览器
sleep(5)
driver.quit()
二、浏览器操作
API:
1.设置浏览器显示范围:
(1)窗口最大化 driver.maxmize_window()
(2)设置窗口大小 driver.set_window_size(width,height)
(3)设置窗口位置 driver.set_window_position(x,y) 坐标 左上角是(0,0)
2.浏览器显示页面操作
(1)页面后退操作 driver.back()
(2)页面前置操作 driver.forword()
(3)页面刷新 driver.refresh()
3.浏览器关闭操作
(1)关闭当前窗口 driver.close()
(2)关闭浏览器 driver.quit()
4.获取浏览器信息
(1)获取标题 driver.title 应用场景:断言时,通过title获取当前所在的页面
(2)获取网页地址 driver.current_url
5.当前窗口:
创建驱动时第一个打开的窗口,对于当前窗口的元素一般可以直接定位和操作,如果弹出新的窗口,对于新的窗口元素不能直接进行操作,需要结合窗口切换
python
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
# 1.打开浏览器 --实例化浏览器
driver=webdriver.Chrome()
# 2.输入url
driver.get("https://www.baidu.com")
# 3.1 最大化浏览器
driver.maximize_window()
sleep(3)
# 3.2 设置窗口宽度500px 高度700px
driver.set_window_size(500,700)
sleep(3)
# 3.3 设置窗口位置
driver.set_window_position(0,500)
sleep(3)
# 3.4 点击超链接
driver.find_element(By.LINK_TEXT,"新闻").click()
sleep(3)
# 3.5返回首页
driver.back()
sleep(3)
# 3.6 前进到新闻界面 --这里会打开新页面
driver.forward()
sleep(3)
# 3.7 刷新新闻界面
driver.refresh()
# 4.关闭浏览器
sleep(5)
driver.quit()
三、页面交互操作
1.下拉框 --Select 推荐还是使用CSS XPATH
(1)元素定位的方式去操作下拉框,操作繁琐,影响脚本运行效率
所以:Selenium--->Select
(2)导包:
from selenium.webdriver.support.select import Select
(3)创建select对象:
select = Select(element)
(4)选择选项:
select .select_by index(index) 根据下标
select .select_by _value(value) 根据选项value属性值
select .select_by_visible text(text) 根据选项文本
(5)Select类实现选项只适用于HTML原生态的<select>+<option>,而基于Element UI 封装的(结构是<div>+<li>)不能使用Select
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
driver = webdriver.Chrome()
driver.get("http://60.204.225.104")
driver.maximize_window()
try:
# 1. 登录(沿用原逻辑,建议替换为显式等待)
WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//input[@placeholder='账号']"))
).send_keys("admin")
time.sleep(1)
driver.find_element(By.XPATH, "//*[@type='password']").send_keys("123456")
time.sleep(1)
driver.find_element(By.XPATH, "//*[@placeholder='验证码']").send_keys("2")
time.sleep(1)
driver.find_element(By.XPATH, "//*[contains(text(), '登')]").click()
time.sleep(2)
# 2. 定位并点击"客户/供应商/承运商"父菜单(展开子选项) 也可以使用lambda 更灵活,适合复杂条件
parent_menu = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
# 父节点定位语法,找到当前元素的父级<div>元素 --可点击元素时父级div而非span本身
(By.XPATH, "//span[text()='客户/供应商/承运商']/parent::div")
)
)
parent_menu.click()
time.sleep(1) # 等待子菜单展开
# 点击"供应商"子菜单
supplier_submenu=WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH,"//*[text()='供应商']"))
)
supplier_submenu.click()
time.sleep(1)
# 3. 定位"第一级"选项(第二个)
second_first_level = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable(
(By.XPATH, "(//*[contains(text(), '第一级')])[2]")
)
)
second_first_level.click()
finally:
time.sleep(5)
driver.quit()
2.弹出框
(1)当页面存在弹出框时,必须先处理掉弹出框才能继续其它操作
(2)类型:
自定义弹出框
JS弹出框
(2)自定义弹出框 ---不用处理,可正常操作
<div>+<button>
可以直接通过web浏览器开发者工具查看到具体的元素信息
通过元素定位后直接可以处理掉
(3)JS弹出框 --必须处理
alert() confirm()
通过IS函数实现,通过web浏览器开发者工具无法查看到元素信息 常见JS弹出框形式:alert(警告框)、confirm(确认框)、prompt(提示框)
不能通过元素定位进行处理
(4)获取弹出框对象
alert=driver.switch_to.alert
alert.text 获取弹出框文本 只合适警告框
(5)弹出框处理方法
alert.accept() 接受弹出框
alert.dismiss() 取消弹出框 确认框没有取消按钮,取消方法一样生效
3.滚动条
(1)所操作的元素不在当前展示页,需要滑动滚动条才能找到(比如用户协议同意)js
(2)定义js字符串 js="window.scrollTo(0,1000)"
(3)执行js字符串 driver.execute_script(js)