Selenium+Python自动化测试(2)-控制浏览器
Selenium+Python自动化测试(2)-控制浏览器
页面设置
from selenium import webdriver
import time
# 使用谷歌浏览器驱动
driver = webdriver.Chrome()
# 1. 打开网址
driver.get("https://www.baidu.com")
driver.get("http://news.baidu.com/")
# 2. 获得当前页面的url地址
print(driver.current_url)
# 3. 后退
time.sleep(2)
driver.back()
# 4. 前进
time.sleep(2)
driver.forward()
# 5. 刷新页面
time.sleep(2)
driver.refresh()
# 6. 获得当前页面的标题
print(driver.title)
driver.quit()
执行输出结果如下:
PS D:\Scripts> python test.py
http://news.baidu.com/
百度新闻——海量中文资讯平台
多窗口控制
多窗口指的是,同一个浏览器下多个标签页;或者多个同个浏览器窗口。
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
wait = WebDriverWait(driver, 10)
# 1. 获得当前页面的句柄
original_window = driver.current_window_handle
# 显式等待:设置等待时长为10秒内,等待后面的条件发生。
# 如果超过设置条件未发生,则抛出异常
wait = WebDriverWait(driver, 10)
# 2. 获得总窗口句柄数 driver.window_handles
# 断言当前的页面句柄数是否为1
assert len(driver.window_handles) == 1
# 3. 创建一个新的便签页 tab
driver.switch_to.new_window('tab')
# 创建一个新的窗口 window
# driver.switch_to.new_window('window')
# 显式等待:调用until里的方法,知道返回TRUE或FALSE
# number_of_windows_to_be ,特定窗口数量是否和实际窗口数量一致
wait.until(EC.number_of_windows_to_be(2))
time.sleep(2)
# 循环目前的窗口句柄
for window_handle in driver.window_handles:
# 如果不是第一个窗口,就切换到第一个窗口
if window_handle != original_window:
# 4. 切换窗口
driver.switch_to.window(original_window)
break
# 5. 关闭当前的浏览器窗口或者标签页
driver.close()
# 6. 关闭浏览器进程;后台驱动程序进程;关闭与webdriver回话的所有窗口和选项卡
driver.quit()
inframe框架
定位inframe中的元素,首先需要定位inframe框架:
# 1. 使用frame的id元素
driver.switch_to.frame('buttonframe')
# 2. 使用iframe的顺序
driver.find_elements_by_tag_name('iframe')[1]
# 3. 其他的定位方式与普通的Web元素的定位一致,这里就不再详细列出
进入inframe框架:
driver.switch_to.frame(iframe)
离开inframe框架
driver.switch_to.default_content()
浏览器窗口控制
设置浏览器窗口的显示模式
# 1. 最大化窗口
# 一般情况下会填充整个展示屏幕,浏览器的菜单栏和下拉条会存在。
driver.maximize_window()
# 2. 最小化窗口
# 隐藏在系统托盘中。该特性适用于Selenium4及之后的版本。
driver.minimize_window()
# 3. 全屏模式
# 效果等同于F11
driver.fullscreen_window()
浏览器窗口的尺寸
# 1. 获得窗口大小
# 单独访问
width = driver.get_window_size().get("width")
height = driver.get_window_size().get("height")
# 先存储再单独访问
size = driver.get_window_size()
width1 = size.get("width")
height1 = size.get("height")
# 2. 设置窗口的大小
driver.set_window_size(1024, 768)
浏览器窗口的位置
# 1. 获得窗口的位置
# 单独访问
x = driver.get_window_position().get('x')
y = driver.get_window_position().get('y')
# 先存储再访问
position = driver.get_window_position()
x1 = position.get('x')
y1 = position.get('y')
# 2. 设置浏览器的位置
# 以左上角作为起始点进行展示
driver.set_window_position(0, 0)
浏览器截图
# 只截取浏览器内容,不包含浏览器的菜单栏和右侧滑动条
# 返回并将base64编码的字符串转换为image
# 括号里面是保存的截图名称,根据需求设置相对路径或者绝对路径
driver.save_screenshot('./image.png')
定位元素截图
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 1. 获得定位元素
ele = driver.find_element(By.ID, 'su')
# 2. 截取定位元素的截图
# 括号里面是保存截图的名称,根据需求设置成相对路径或者绝对路径
ele.screenshot('ele.png')
driver.quit()
参考链接
WebDriver-Browser manipulation