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