0


Selenium WebDriver的高级应用

一.下拉选项框操作

使用前需要导入

from selenium.webdriver.support.select import Select

1.根据索引值定位指定选项

select_by_index(index)

2.根据value属性值定位指定选项

select_by_value(value)

3.根据文本定位指定选项

select_by_visible_text(text)

使用后下拉框会直接更换到对应的内容,不会观察到下拉框

代码定位文件路径中由于文件名字开头为r所以会自动认定特殊字符,只需要多加一个\便可以解决

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
url = "C:\game\TestProject\TestProject\\register.html"
driver.get(url)
driver.maximize_window()
# 定位下拉选择框
element = driver.find_element(By.XPATH,"//*[@id='selectA']")
select = Select(element)
# 1.根据索引值定位“广州”选项
select.select_by_index(2)
sleep(2)
# 2.根据value值定位“上海”选项
select.select_by_value("sh")
sleep(2)
# 3.根据文本定位“深圳”选项
select.select_by_visible_text("深圳")
sleep(2)
driver.quit()

二.弹出框操作

需要在界面中获取弹出框driver.switch_to.alert,直接使用便可以,不需要获取具体的位置

accept(),接收弹出框的消息,例如点击弹出窗中的确定

dismiss(),取消弹出框的消息,例如点击弹出窗中的取消

send_keys(),向弹出框输入消息

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
url = "C:\game\TestProject\TestProject\html\\alert.html"
driver.get(url)
driver.maximize_window()
# 定位“提示框”按钮并实现该按钮的单击事件
driver.find_element(By.ID,"alerta").click()
sleep(2)
alert_message = driver.switch_to.alert
print(alert_message.text)
# 调用accept()方法
alert_message.accept()
# 定位“确认框”按钮并实现该按钮的单击事件
driver.find_element(By.ID,"confirma").click()
sleep(2)
confirm_message = driver.switch_to.alert
print(confirm_message.text)
confirm_message.accept()
# 定位“输入框”按钮并实现该按钮的单击事件
driver.find_element(By.ID,"prompta").click()
sleep(2)
# 获取输入框的文字信息
prompt_message = driver.switch_to.alert
print(prompt_message.text)
prompt_message.accept()
driver.quit()

三.截图操作

get_screenshot_as_file(filename),获取页面,并将截图保存到自己所放的路径下,需要写出截图的命名

save_screenshot(filename),只需要截图文件的命名便可以,自动保存到项目的根目录中

get_screenshot_as_base64(),获取页面的base64编码字符串数据

get_screenshot_as_png(),获取页面截图的二进制数据

四.多窗口切换

driver.current_window_handle,获取当前窗口的句柄

driver.window_handles,获取所有窗口的句柄

driver.switch_to.window(handle),切换到指定的窗口

使用方法:首先定义一个获取所有窗口的名字,例如handle2 = driver.window_handles,之后handle2存储的方式为列表,所以使用时例如driver.switch_to.window(handle2[0]),括号中内容为对用窗口的句柄

实例代码如下

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.jd.com/")
driver.maximize_window()
# 当前窗口的句柄
handle1 = driver.current_window_handle
print("输出当前窗口的句柄:", handle1)
# 定位并单击“京东超市”链接
driver.find_element(By.PARTIAL_LINK_TEXT,"我的订单").click()
# 所有窗口句柄
handle2 = driver.window_handles
print("输出所有窗口的句柄:", handle2)
sleep(3)
# 切换到指定窗口
driver.switch_to.window(handle2[0])
handle3 = driver.current_window_handle
sleep(10)
print("输出当前窗口的句柄:", handle3)

五.多表单切换

driver.switch_to.frame(frame_reference),括号中内容为,表单的id

在同一个网页中切换表单

from time import sleep
from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("C:\game\Chapter03\\frameswitch.html")
first_iframe = driver.find_element(By.ID, "idframe1")
driver.switch_to.frame(first_iframe)
driver.find_element(By.ID, "AuserA").send_keys("admin")
sleep(2)
driver.switch_to.default_content()
second_iframe = driver.find_element(By.ID, "idframe2")
driver.switch_to.frame(second_iframe)
driver.find_element(By.ID, "BuserA").send_keys("admin")
sleep(2)
driver.quit()

六.元素等待

使用前需要导入包from selenium.webdriver.support.wait import WebDriverWait

1.显示等待

WebDriverWait(driver,timeout,poll_frequency= ,ignored_exceptions=)

代表的内容分别为前两个为必须有的参数,浏览器驱动,最长的等待时间,第三个为查找元素的默认时间,默认0.5,使用过程中可以直接写数字,最后一个为可以被忽略的集合

until(method,message=''),第一个是一个匿名参数,例如:每隔一段时间调用该函数,直到这个函数返回True,第二个参数表示超时后的异常信息,可以不填写。

使用方法例如:a=WebDriverWait(driver,5,0.5).until(lambda p: p.find_element(By.CLASS_NAME,"lg-button"))

p为设定好的页面

until_not(method,message='')与until相反,false为查找成功

2.隐式等待

implictly_wait(timeout)括号中代表等待的时间

用法例如:设置登录页面的隐式等待

dirver.implictly_wait(10)只有在页面加载完毕或10秒后才会继续运行

3.强制等待

sleep(seconds)程序休眠一段时间,在运行

七.Cookie处理

WEB服务器生成的数据都以Cookie的形式保存在浏览器的小文本中

driver.get_cookie(),获取指定cookie

driver.get_cookies(),获取网站所有cookie

driver.add_cookie(),添加cookie

driver.delete_cookie(),删除指定cookie

driver.delete_all_cookies(),删除所有cookie

获取到的信息都是由字典的形式展现

以获取百度的cookie为例

from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
cookie1 = driver.get_cookies()
print("获取当前页面下的所有Cookie信息:", cookie1)
# 添加Cookie
driver.add_cookie({'name': 'testname', 'value': '123456'})
# 获取指定Cookie
print("获取指定Cookie信息:", driver.get_cookie('testname'))
# 删除指定Cookie
driver.delete_cookie("testname")
# 删除所有Cookie
driver.delete_all_cookies()
sleep(2)
driver.quit()

八.文件的上传与下载

1.文件上传

如果按钮由<input>标签实现的只需要如下便可以上传,例如上传png文件

a=driver.find_element(By.NAME,"file").send_keys(c:\image.png)

2.文件下载

Selenium WebDriver中并没有提供对应的方法来测试文件的下载,所以下载时需要自己用自动化脚本在页面中点击所给与的下载路径,例如:预约管理-预约设置-模版下载,按顺序写出脚本进行下载。

但是在过程中我们可以更改管理器的设置,例如禁止弹出窗口('profile.default_content_settings.popups': 0,代表禁止弹出窗口),下载路径

prefs = {'profile.default_content_settings.popups': 0,
         'download.default_directory': 'D:\\downloadFile'}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=options)

九.执行JavaScript脚本

1.控制浏览器滚动条

使用方法示例:

a=“window.scrllTo(800,800)”

driver.execute_script(a)

设置横滚动条坐标值移动到800,纵滚动条坐标值移动到800

a=“window.scrllTo(0,document.cody.scrollHeight)”纵滚动条移动到底部

a=“window.scrllTo(0,0)”纵滚动条与横滚动条回到初始的位置

a=“window.scrllTo(document.cody.scrollWeight,0)”横滚动条滚动到最右侧

2.处理日期控件

将日期改为2021-10-13如下

DateJS = "document.getElementById('train_date').value='2021-10-13'"
driver.execute_script(DateJS)

DateJS为定位到日期的位置,并选择对用的日期


本文转载自: https://blog.csdn.net/m0_73755884/article/details/144056093
版权归原作者 樱小路奈希 所有, 如有侵权,请联系我们删除。

“Selenium WebDriver的高级应用”的评论:

还没有评论