selenium的11种基础操作(定位和操作元素,浏览器的打开、管理、处理、代理)
Selenium操作学习笔记
** 使用selenium自动化测试工具,模拟人为操作浏览器,达到可以注册/登录网页,滑动下拉框,选择,鼠标点击等操作。
学习背景: windows系统,python语言,PyCharm
学习资源: https://www.selenium.dev/documentation/en/
1. 定位元素
是最重要的学习内容之一,学习如何定位到网页中的元素
1.1 定位单一元素
driver.find_element(By.ID, "cheese")
tips:driver是WebDriver的实例对象
一旦通过ID定位到了cheese,可以在上一步结果的基础上进一步缩小范围
cheese = driver.find_element(By.ID, "cheese")
cheddar = cheese.find_elements_by_id("cheddar")
同时,也可以使用另一种方法实现
cheddar = driver.find_element_by_css_selector("#cheese #cheddar")
1.2 定位多个元素
网页结构如下
<ol id=cheese>
<li id=cheddar>…
<li id=brie>…
<li id=rochefort>…
<li id=camembert>…
</ul>
定位cheese下的所有元素
mucho_cheese = driver.find_elements_by_css_selector("#cheese li")
1.3 元素选择策略
WebDriver有八个内置的元素选择方法
定位法 | 使用描述 |
---|---|
class name | 寻找包含查找值的class name元素(不包括复合class name) |
css selector | 用css法定位元素 |
id | 依据id属性值定位元素 |
name | 依据name属性值定位元素 |
link text | 定位其可视文本与搜索值匹配的锚元素 |
partial link text | 定位其可视文本包含搜索值的第一个锚元素 |
tag name | 定位tag name与搜索值匹配的元素 |
xpath | 查找与xpaht表达式匹配的元素 |
1.4 其他定位法
在定位到想要的元素后,可以使用以下方法定位到相邻的元素
方法 | 作用 |
---|---|
above() | 定位到现元素上面的元素 |
below() | 定位到现元素下面的元素 |
toLeftOf() | 定位到现元素左面的元素 |
tpRightOf() | 定位到现元素右面的元素 |
near() | 定位到最多距现元素50个像素远的元素 |
2. 动作操作
2.1 定位并输入文本
name = "Charles"
driver.find_element(By.NAME, "name").send_keys(name)
2.2 拖放功能
source = driver.find_element(By.ID, "source")
target = driver.find_element(By.ID, "target")
ActionChains(driver).drag_and_drop(source, target).perform()
2.3 点击元素
driver.find_element(By.CSS_SELECTOR, "input[type='submit']").click()
3. 实例化WebDriver
from selenium.webdriver import Chrome
driver = Chrome()
或
from selenium.webdriver import Chrome
with Chrome() as driver:
#your code inside this indent
4. 浏览器操作
4.1 打开网页
driver.get("https://selenium.dev")
4.2 获取当前网址
从浏览器的地址栏读取当前的URL
driver.current_url
4.3 按下浏览器的后退按钮
driver.back()
4.4 按下浏览器的前进按钮
driver.forward()
4.5 刷新当前网页
driver.refresh()
4.6 从浏览器中读取当前页面标题
driver.title
4.7 当打开一个新窗口时,获取该窗口的处理权
driver.current_window_handle
4.8 当点击一个链接跳转到新窗口时,需要switch到新窗口
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Start the driver
with webdriver.Chrome() as driver:
# Open URL
driver.get("https://seleniumhq.github.io")
# Setup wait for later
wait = WebDriverWait(driver, 10)
# Store the ID of the original window
original_window = driver.current_window_handle
# Check we don't have other windows open already
assert len(driver.window_handles) == 1
# Click the link which opens in a new window
driver.find_element(By.LINK_TEXT, "new window").click()
# Wait for the new window or tab
wait.until(EC.number_of_windows_to_be(2))
# Loop through until we find a new window handle
for window_handle in driver.window_handles:
if window_han