五WebDriver常用操作
Posted 测试不简单
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五WebDriver常用操作相关的知识,希望对你有一定的参考价值。
本章篇幅较长,主要通过case的方式介绍WebDriver常用的操作
一、浏览器的基本操作
driver.current_url
driver.title
driver.page_source
driver.port
driver.capabilities
driver.get(url):
driver.back()
driver.forward()
driver.refresh()
driver.set_page_load_timeout(5)
driver.implicitly_wait(秒)
driver.execute_script(js)
二、鼠标键盘操作
Selenium将鼠标键盘事件都封装到了Action Chains类中
使用Action Chains 需要引入 from selenium.webdriver.common.action_chains import ActionChains
下面列出 Action Chains 中常用的API:
常用的键盘操作API 如下:
使用示例1、:进入马蜂窝官网中去旅行类目下自由行子品类
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.mafengwo.cn")
# 先定位元素
goTravel = driver.find_element_by_class_name("drop-toggle")
# 将鼠标悬停在首页"去旅行"上
ActionChains(driver).move_to_element(goTravel).perform()
# 鼠标悬停时,定位元素,超链接中"自由行",然后单机
driver.find_element_by_xpath('//*[@id="_j_sales_panel"]/ul/li[1]/a').click()
sleep(3)
driver.quit()
三、操作下拉列表
操作下拉列表需要使用 Select 类,使用Select需要引入 from selenium.webdriver.support.select import Select
常用的方法和属性如下:
使用示例:通过 Select 改变页面内容条数
import time
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com")
# 搜索框中输入马蜂窝,并删除最后一个字符
driver.find_element_by_id("kw").send_keys("马蜂窝"+Keys.BACK_SPACE)
# 先定位元素,设置按钮
tj_settingicon = driver.find_element_by_link_text("设置")
# 将鼠标悬停到设置按钮上
ActionChains(driver).move_to_element(tj_settingicon).perform()
# 点击搜索设置
driver.find_element_by_link_text("搜索设置").click()
time.sleep(3)
# 将每页显示设置选为"每页显示50条"
nr=driver.find_element_by_xpath('//*[@id="nr"]')
# Select(nr).select_by_index(2)
#Select(nr).select_by_value("20")
Select(nr).select_by_visible_text("每页显示50条")
# 返回下拉框中已经选中的选项
ops = Select(nr).all_selected_options
for op in ops:
print(op.text)
# 返回第一个被选中的选项
fops = Select(nr).first_selected_option
print(fops.text)
sleep(3)
driver.quit()
四、操作窗口、弹窗
常用的弹窗一共有三种:
alert:单纯的弹窗
confirm:有确认按钮,取消按钮
prompt:输入内容
常用的方法属性如下(弹窗):
driver.current_window_handle
driver.window_handles
driver.maximize_window()
driver.set_window_size(480, 800)
driver.get_window_size()
driver.get_window_position()
driver.set_window_position(300,200)
driver.get_screenshot_as_file(filename)
driver.close()
driver.quit()
driver.switch_to_frame(id或name属性值)
driver.switch_to.parent_content()
driver.switch_to.default_content()
driver.switch_to_window(窗口句柄)
driver.switch_to.window(窗口句柄)
driver.switch_to_alert()
driver.switch_to.alert().accept()
五、Js 操作页面元素
5.1 JavaScript操作页面元素
WebDriver对于部分浏览器上的控件并不是直接支持的,比如浏览器右侧、下侧滚动条,显示框等。此时需要借助JavaScript来实现
Webdriver提供了两个方法来执行JavaScript代码
from selenium import webdriver
# 初始化webdriver,并打开马蜂窝首页
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.mafengwo.cn")
#通过id找到马蜂窝首页搜索框,输入北京
inputJs = 'document.getElementById("_j_index_search_input_all").value="北京"'
#javascript代码
driver.execute_script(inputJs)
# 让下拉框滑动到指定位置
windowJs = "window.scrollTo(100,600)"
#使滚动条滑动到底部
# windowJs = "window.scrollTo(0,document.body.scrollheight)"
driver.execute_script(windowJs)
5.2 jQuery操作页面元素
jQuery是JavaScript到一个类库,是在JavaScript基础上的深度封装。使用更加简单。
jQuery选择器参考:https://www.runoob.com/jquery/jquery-selectors.html
from selenium import webdriver
driver = webdriver.Chrome();
driver.maximize_window()
driver.get("https://www.mafengwo.cn")
inputJQ = "$('#_j_index_search_input_all').val('北京')"
driver.execute_script(inputJQ)
clickJQ = "$('#_j_index_search_btn_all').click()"
driver.execute_script(clickJQ)
driver.quit()
六、屏幕截屏
七、Frame操作
Frame有Frame set、Frame、iFrame三种。Frameset可以直接按照正常元素定位。Frame和iFrame定位方法相同,需要把驱动切换到Frame内再进行操作。
示例:在QQ邮箱中输入用户名
用户名和登陆密码都嵌套在iframe标签内,所以再操作iframe中的元素时,需要先进行驱动的切换。当驱动切换到Frame内部后,只能对Frame内部对元素进行操作。如果需要对Frame之外的元素进行操作,则需要返回原有驱动。
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://mail.qq.com/cgi-bin/loginpage")
# 驱动切换到Frame(三种方式)
#由于登陆位于第二个frame,所以此处应该是1
driver.switch_to.frame(1)
driver.switch_to.frame("login_frame")
driver.switch_to.frame(driver.find_element_by_id("login_frame"))
# 通过id属性
driver.find_element_by_id("u").send_keys("961370624@qq.com")
# 通过name属性
driver.find_element_by_name("p").send_keys("123456789")
time.sleep(2)
driver.quit()
八、上传附件
三种上传附件的方式
方式一:send_keys
当上传框是input类型的标签,并且type为file时,则可以直接通过send_keys的方式绕过弹出框操作,直接将文件信息传递给“添加附件”按钮
send_keys中填写文件的相对路径
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://mail.qq.com/cgi-bin/loginpage")
driver.switch_to.frame("login_frame")
driver.find_element_by_id("u").send_keys("1976966711@qq.com")
driver.find_element_by_id("p").send_keys("sunsk")
driver.find_element_by_id("login_button").click()
time.sleep(10)
driver.find_element_by_id("composebtn").click()
time.sleep(2)
driver.find_element_by_name("UploadFile").send_keys("/Users/sunshaokang/Desktop/孙少康.xlsx")
time.sleep(10)
driver.quit()
方式二:借助三方工具之AutoIt
Autolt目前仅支持Windows操作系统,怎奈何没有Windows电脑。后续补充
方式三:借助三方工具之pywinauto
pywinauto目前仅支持Windows操作系统,怎奈何没有Windows电脑。后续补充
九、Cookie操作
操作 Cookie 的 API 如下:
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.maximize_window()
driver.get("https://passport.mafengwo.cn/")
time.sleep(1)
cookies = driver.get_cookies()
print(cookies)
print("===================================================================")
driver.find_element_by_xpath('//*[@id="_j_login_form"]/div[1]/input').send_keys("185146199**")
driver.find_element_by_xpath('//*[@id="_j_login_form"]/div[2]/input').send_keys("**********")
driver.find_element_by_id("_js_loginBtn").click()
time.sleep(3)
cookies = driver.get_cookies()
print(cookies)
driver.quit()
十、滑块处理
以注册携程为例
1、先同意协议
2、拉动滑块
处理滑块思路如下
1、先找到滑块和滑轨目标元素
2、利用ActionChains中的drag_and_drop_by_offset方法将滑块拖动至目标位置
drag_and_drop_by_offset(source,xoffset,yoffset):参数说明:(源,目标位置横坐标,目标位置纵坐标)
from selenium import webdriver
# selenium对于滑块的操作
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://passport.ctrip.com/user/reg/home")
driver.find_element_by_css_selector("#agr_pop > div.pop_footer > a.reg_btn.reg_agree").click()
# 确定滑块宽度,高度
source = driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-drop-btn")
# 确定滑道宽度,高度
target = driver.find_element_by_css_selector("#slideCode > div.cpt-drop-box > div.cpt-bg-bar")
print("滑块width:" + str(source.size['width']) + ",height:" + str(source.size['height']))
print("滑道width:" + str(target.size['width']) + ",height:" + str(target.size['height']))
# 使用Action Chains模块拖动滑轨
ActionChains(driver).drag_and_drop_by_offset(source,target.size["width"],source.size['height']).perform()
以上就是 WebDriber 常见的一些操作,如有疑问可以留言哦
扫码二维码
获取更多精彩
测试不简单
以上是关于五WebDriver常用操作的主要内容,如果未能解决你的问题,请参考以下文章