五WebDriver常用操作

Posted 测试不简单

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了五WebDriver常用操作相关的知识,希望对你有一定的参考价值。

本章篇幅较长,主要通过case的方式介绍WebDriver常用的操作


一、浏览器的基本操作

#属性:driver.current_url #用于获得当前页面的URLdriver.title #用于获取当前页面的标题driver.page_source #用于获取页面html源代码driver.port #用于获取浏览器的端口driver.capabilities  #打印浏览器capabilities相关信息
#浏览器:driver.get(url):#浏览器加载urldriver.back() #浏览器后退driver.forward() #浏览器前进driver.refresh() #浏览器刷新(点击刷新按钮)driver.set_page_load_timeout(5) #设置页面加载时间,如果超时会跑异常
#隐式等待,通过一定的时长等待页面上某一元素加载完成。(常用)#若提前定位到元素,则继续执行。等待10s若超过时间未加载出,则抛出NoSuchElementException异常。driver.implicitly_wait(秒) 
#执行js:driver.execute_script(js) #执行javascript脚本


二、鼠标键盘操作

Selenium将鼠标键盘事件都封装到了Action Chains类中
使用Action Chains 需要引入 from selenium.webdriver.common.action_chains import ActionChains

下面列出 Action Chains 中常用的API:



常用的键盘操作API 如下:


五、WebDriver常用操作

使用示例1、:进入马蜂窝官网中去旅行类目下自由行子品类


from time import sleepfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium import webdriverfrom 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

常用的方法和属性如下:五、WebDriver常用操作

使用示例:通过 Select 改变页面内容条数

import timefrom time import sleep
from selenium.webdriver.common.action_chains import ActionChainsfrom selenium import webdriverfrom 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_optionsfor op in ops: print(op.text)
# 返回第一个被选中的选项fops = Select(nr).first_selected_optionprint(fops.text)sleep(3)driver.quit()


四、操作窗口、弹窗

常用的弹窗一共有三种:

alert:单纯的弹窗

confirm:有确认按钮,取消按钮

prompt:输入内容

常用的方法属性如下(弹窗):

五、WebDriver常用操作

#窗口:driver.current_window_handle #用于获取当前窗口句柄driver.window_handles #用于获取所有窗口句柄
driver.maximize_window() #将浏览器最大化显示driver.set_window_size(480, 800) #设置浏览器宽480、高800显示driver.get_window_size() #获取当前窗口的长和宽driver.get_window_position() #获取当前窗口坐标driver.set_window_position(300,200) #设置当前窗口坐标driver.get_screenshot_as_file(filename) #截取当前窗口#实例:driver.get_screenshot_as_file('D:/selenium/image/baidu.jpg')
driver.close() #关闭当前窗口,或最后打开的窗口driver.quit() #关闭所有关联窗口,并且安全关闭session
#窗口切换:driver.switch_to_frame(id或name属性值)#切换到新表单(同一窗口)。若无id或属性值,可先通过xpath定位到iframe,再将值传给switch_to_frame()driver.switch_to.parent_content()#跳出当前一级表单。该方法默认对应于离它最近的switch_to.frame()方法driver.switch_to.default_content() #跳回最外层的页面 driver.switch_to_window(窗口句柄) #切换到新窗口 driver.switch_to.window(窗口句柄) #切换到新窗口
#弹框切换:driver.switch_to_alert() #警告框处理。处理JavaScript所生成的alert,confirm,promptdriver.switch_to.alert().accept() #警告框处理

五、Js 操作页面元素

5.1 JavaScript操作页面元素

WebDriver对于部分浏览器上的控件并不是直接支持的,比如浏览器右侧、下侧滚动条,显示框等。此时需要借助JavaScript来实现
Webdriver提供了两个方法来执行JavaScript代码

五、WebDriver常用操作

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()

六、屏幕截屏

五、WebDriver常用操作

七、Frame操作

Frame有Frame set、Frame、iFrame三种。Frameset可以直接按照正常元素定位。Frame和iFrame定位方法相同,需要把驱动切换到Frame内再进行操作。
示例:在QQ邮箱中输入用户名

五、WebDriver常用操作

用户名和登陆密码都嵌套在iframe标签内,所以再操作iframe中的元素时,需要先进行驱动的切换。当驱动切换到Frame内部后,只能对Frame内部对元素进行操作。如果需要对Frame之外的元素进行操作,则需要返回原有驱动。

五、WebDriver常用操作

import timefrom selenium import webdriver
driver = webdriver.Chrome()driver.maximize_window()driver.get("https://mail.qq.com/cgi-bin/loginpage")
# 驱动切换到Frame(三种方式)#由于登陆位于第二个frame,所以此处应该是1driver.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()

五、WebDriver常用操作

方式二:借助三方工具之AutoIt

Autolt目前仅支持Windows操作系统,怎奈何没有Windows电脑。后续补充

方式三:借助三方工具之pywinauto

pywinauto目前仅支持Windows操作系统,怎奈何没有Windows电脑。后续补充

九、Cookie操作

操作 Cookie 的 API 如下:

五、WebDriver常用操作

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()

五、WebDriver常用操作

五、WebDriver常用操作


以上就是 WebDriber 常见的一些操作,如有疑问可以留言哦


五、WebDriver常用操作

扫码二维码

获取更多精彩

测试不简单

五、WebDriver常用操作
喜欢就点个在看再走吧

以上是关于五WebDriver常用操作的主要内容,如果未能解决你的问题,请参考以下文章

appium 启动ios设备自动化测试+常用操作

webdriver一些比较常用的鼠标和键盘操作

转载WebDriver常用的鼠标/键盘操作

python selenium-webdriver 常用浏览器的操作

webdriver API

提效小技巧——记录那些不常用的代码片段