三.Python+Selenium自动化测试系列:WebDriver介绍、WebDriver 操控浏览器

本文详细介绍了Selenium WebDriver的基本概念、通信模式以及如何操控浏览器,包括下载对应浏览器驱动、打开和操作网页、切换框架和标签页等。此外,还展示了如何处理弹出框,如Alerts、Confirm和Prompt。Selenium WebDriver作为代码与浏览器交互的桥梁,提供了丰富的API用于自动化测试和网页操作。
摘要由CSDN通过智能技术生成

1、Selenium WebDriver介绍

        Selenium WebDriver 指的是语言绑定和各个浏览器控制代码的实现。 这通常被称为 WebDriver。

Selenium WebDriver 是W3C 推荐标准

        – WebDriver 被设计成一个简单和简洁的编程接口。

        – WebDriver 是一个简洁的面向对象 API。

         – 它能有效地驱动浏览器。

简单来说WebDriver 就是代码与浏览器交互的桥梁,我们写测试代码是要遵循WebDriver 的API规范。

2 、WebDriver 通信模式

(1)直接_通信模式:WebDriver 通过驱动程序向浏览器传递命令, 然后通过相同的路径接收信息 驱动程序是特定于浏览器的,

例如 ChromeDriver 对应于谷歌的 Chrome/Chromium, GeckoDriver 对应于 Mozilla 的 Firefox 的,等等。驱动程序在与浏览器相同的系统上运行

(2)远程_通信模式:与浏览器的通信也可以是通过 Selenium 服务器或 RemoteWebDriver

a、RemoteWebDriver 与驱动程序和浏览器运行在同一个系统上

b、远程通信也可以使用 Selenium Server 或 Selenium Grid 进行,这两者依次与主机系统上的驱动程序进行通信

 3、WebDriver 操控浏览器

(1)根据自己的需求下载驱动,选择自己浏览器的版本下载

          Chrome,https://npm.taobao.org/mirrors/chromedriver/

          Firefox,https://github.com/mozilla/geckodriver/releases

(2)打开浏览器

        a、把驱动程序放在python安装跟目录下

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
# driver = webdriver.Firefox()
driver.maximize_window()
sleep(3)
driver.quit()

        b、指定驱动的位置,这种就不用把驱动程序放到python安装目录下

首先,在项目底下创建一个WebDriver的包用于存放Driver驱动文件,再写一个代码driver_dir.py代码文件,用于查找Driver所在的路径,如下

其次把driver_dir.py引入项目中,使用webdriver.Chrome(executable_path=DriverPath)或者webdriver.Firefox(executable_path=DriverPath)

代码如下:

from time import sleep
from selenium import webdriver
from WebDriver import driver_dir

driver = webdriver.Chrome(executable_path=driver_dir.chrome_driver_path)
# driver = webdriver.Firefox(executable_path=driver_dir.firefox_driver_path)
driver.maximize_window()
sleep(3)
driver.quit()

(3)、打开网站:driver.get("https://www.baidu.com") 
(4)、获取当前 URL:driver.current_url 
(5)、后退:driver.back() 
(6)、前进:driver.forward() 
(7)、刷新:driver.refresh() 
(8)、获取标题:driver.title 
(9)、最大化窗口:driver.maximize_window() 
(10)、最小化窗口:driver.minimize_window() 
(11)、全屏窗口:driver.fullscreen_window()
(12)、关闭窗口或标签页:driver.close() 
(13)、屏幕截图:driver.save_screenshot('./image.png') 

(14)、框架切换switch_to.frame(‘XX’),Frames 和 Iframes框架是一种现在已被弃用的方法,用于从同一域中的多个文档构建站点布局

from selenium import webdriver
from WebDriver import driver_dir

# 启动Chromedriver,并与Chromedriver开启会话
driver = webdriver.Chrome(driver_dir.chrome_driver_path)
driver.maximize_window()
driver.get("https://XXXXX")
# 1、通过 id 切换框架
driver.switch_to.frame('buttonframe')
# 2、基于索引切换到第 2 个 iframe
iframe = driver.find_elements_by_tag_name('iframe')[1]
# 切换到选择的 iframe
driver.switch_to.frame(iframe)
# 3、切回到默认内容
driver.switch_to.default_content()

(15)、切换浏览器标签switch_to.window(window_handles) ,配合浏览器句柄使用,所有切换动作都是用switch_to语句

import time
from selenium import webdriver
from WebDriver import driver_dir

# 启动Chromedriver,并与Chromedriver开启会话
driver = webdriver.Chrome(driver_dir.chrome_driver_path)
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
driver.find_element_by_id('kw').send_keys("selenium")
driver.find_element_by_id('su').click()

# 获取当前标签页句柄, 对象,多个为对象数列
wins = driver.current_window_handle
print('当前标签页:', wins)

# 点击其中一个百度结果,出现一个新标签页
driver.find_element_by_xpath('//h3[@class="t c-gap-bottom-small"]//a').click()
time.sleep(2)

# 获取当前所有标签页句柄
wins = driver.window_handles    # 返回的是一个列表,按照标签页打开的顺序
print('所有标签页1:', wins)

# 切换到第一个标签页
driver.switch_to.window(wins[0])
time.sleep(2)

# 打开新的标签页
js = 'window.open("https://cnblogs.com/liangcr/")'
driver.execute_script(js)
time.sleep(2)

# 再次获取当前所有标签页句柄
wins = driver.window_handles
print('所有标签页2:', wins)
print('所有标签页-1:', wins[-1])
# 关闭当前标签页
driver.close()

time.sleep(3)
driver.quit()  # 关闭浏览器

(16)、弹出框的处理方式,如Alerts警告框、Confirm确认框、Prompt 提示框:
        a、使用swtich_to.alert切换到弹出框,建议先使用显性等待expected_conditions.alert_is_present()判断弹出框是否可见,或者强制等待1s:time.sleep(1)
        b、使用Alert类提供的一系列操作方法对弹窗进行操作:
                accept()  是
                dismiss() 否
                send_keys()  往弹出框里输入文本
                text()  获取弹框里的内容

import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from WebDriver import driver_dir

# 启动Chromedriver,并与Chromedriver开启会话
driver = webdriver.Chrome(driver_dir.chrome_driver_path)
driver.maximize_window()
driver.get("https://www.w3school.com.cn/tiy/t.asp?f=js_alert")

WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it('iframeResult'))

# 触发alert弹框
driver.find_element_by_xpath('//button[text()="试一试"]').click()
WebDriverWait(driver, 10).until(EC.alert_is_present())  # 等待alert可见
time.sleep(3)  # 这里等待是为了看下效果
alert = driver.switch_to.alert  # Alert类的实例化
alert.accept()  # 是
# dismiss()     否
# text()        获取弹框里的内容
# Send_keys()   往弹出框里输入文本

driver.quit()

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liang_cr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值