Web自动化工具Selenium常用方法(Python)

Posted zzgcdut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web自动化工具Selenium常用方法(Python)相关的知识,希望对你有一定的参考价值。

Selenium概述

Selenium是一款开源的Web自动化框架,模拟用户操作浏览器的行为,主要用于界面自动化、浏览器兼容性测试。
优点:
1、跨平台,如:Windows、Linux 和 Mac等;
2、支持各种浏览器,如:Chrome、Firefox、Edge、IE、Opear等;
3、完全开源。
webdriver:
将浏览器原生的API封装成WebDriver API ,作为编程语言与浏览器通信的桥梁,从而达到操作浏览器的目的。

注:不同的浏览器,需要不同的webdriver,且webdriver的版本号与浏览器版本号需对应。

Selenium操作浏览器

1.启动浏览器

导包:

from selenium import webdriver

1)直接指定driver的路径

本文以Chrome浏览器为例

driver = webdriver.Chrome(executable_path="driver路径")

2)设置driver的环境变量

将webdriver放置路径添加环境变量:
环境变量添加步骤:桌面—>我的电脑—>属性—>高级系统设置—>环境变量—>系统变量找到path并选中—>点击编辑—>新建—>保存,如下步骤:


推荐:一般直接将对应浏览器版本的driver文件放置在在python的安装目录下,省去再次添加环境变量(本人常用方法)。
设置环境变量后,可不用再次指定driver路径:

driver = webdriver.Chrome()

2.打开网页url

driver.get("http://xxxx")

3.浏览器其它控制

driver.maximize_window()  # 浏览器最大化
driver.minimize_window()  # 浏览器最小化
driver.set_window_size(1980,1080)  # 指定浏览器大小

4.无界面操作

options = webdriver.ChromeOptions()
options.add_argument('--headless') # 设置无界面
driver=webdriver.Chrome(chrome_options=options)

5.关闭浏览器:

close():关闭当前当前浏览器窗口
quit():关闭所有页面,即关闭浏览器
6、其它操作
前进:driver.forward()
后退:driver.back()
刷新:driver.refresh()

元素定位

1.常规定位方法

driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_css_selector()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_xpath()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text():模糊查询

注:查找多个元素:将上述定位方法中的element改为elements即可,如:driver.find_elements_by_name(),唯一属性id除外

2.xpath的定位方法

**绝对路径:**以“/”表示,从html标签逐层向下寻找,如:/html/body/table/tbody/tr[2]/td[2]/div/div[2]/table[2]/thead/tr/th[1]
**相对路径:**以“//”表示,表示任意位置,依据给出的路径匹配节点
如://*[@id=“fileID”]
常用函数定位法:
使用contains方法,如:xpath=//input[contains(@id,‘abcd’)]
使用text()方法,如:xpath=//button[text()=‘保存’]
使用starts-with方法(同理还有:ends-with),多用于元素属性部分发生变化的情况,如:

# 如:id=abcd12312sdfsf342
xpath=//input[starts-with(@id,'abcd')]

一个元素需要通过多个属性值定位,可以用“and”,如:

//span[@id="fileID" and @class='classname']

3.css定位

常用的包含以下几种:
类选择:find_element_by_css_selector(".slg")
id选择:find_element_by_css_selector("#su")
标签选择:find_element_by_css_selector(“input”)
属性选择:find_element_by_css_selector("[name=‘kw’]")
层级关系:
find_element_by_css_selector(“span>input”)
find_element_by_css_selector(“form>input:nth-child(2)”) #查找form标签下第2个input元素
组合选择:find_element_by_css_selector(“form.fm>span>input.slg”)
其它方式:
find_element_by_css_selector("[class*=swait_lg]"),查找class属性包含“swait_lg”
find_element_by_css_selector("[class^=bba]"),以“bba”开头
find_element_by_css_selector("[class$=abb]"),以“abb”结尾

元素操作

点击:click()
清除原有内容:clear()
输入值:send_keys()
获取内容:text
获取元素属性:get_attribute()
判断元素是否显示:is_displayed()

焦点转换

1、转移到弹窗:

ele = driver.switch_to.alert
ele.accept() # 接受
ele.text # 获取弹窗内容
ele.dismiss() # 退出或取消

2、页内焦点切换: driver.switch_to.frame(frame)
退出当前焦点窗口到原窗口:driver.switch_to.default_content()
3、多窗口切换:

driver.switch_to.window(name)
handles=driver.window_handles()
driver.switch_to.window(handles[-1])

等待

selenium有3种等待方式:
1、强制等待

time.sleep(2)

2、显示等待(局部,针对某个元素)

WebdriverWait(driver,5,0.5).until(lambda driver:driver.find_element_by_xpath())

3、隐式等待(全局,可解决大部分的元素等待问题)

driver.implicitly_wait(20)

截图

1.截取整个网页:

driver.get_screenshot_as_base64()  # 保存的是base64的编码格式
driver.save_screenshot('XX/XX.png')  # 如果在alert之类的弹出对话框出现后截图,程序会抛出异常
driver.get_screenshot_as_png()  # 保存的是二进制数据,需要写成图片文件保存
driver.get_screenshot_as_file('XX/XX.png')  # 获取当前window的截图,截图成功返回True,出现IOError的时候返回False

2.截小图:

ele.screenshot()
ele = driver.find_element_by_id('msg')
ele.screenshot('./3.png')

鼠标键盘操作

常用工具:Actionchains、pymouse、pykeyboard、pyautogui
1.Actionchains常用鼠标操作:
单机:click()
双击:double_click()
移动到某个元素上:move_to_element
在某个元素上悬停:click_and_hold
将一个元素拖到另一个元素上:drag_and_drop
用法:

from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).context_click(driver.find_element_by_id('su')).perform()

注:鼠标的所有事件,必须使用perform()执行所有ActionChains中存储的行为

2.键盘操作:

from selenium.webdriver.common.keys import Keys

send_keys(Keys.ENTER)  # 键盘的回车事件
send_keys(Keys.BACKSPACE)  # 删除,回退
# 组合使用
send_keys(Keys.CONTROL,'a')  # 全选
send_keys(Keys.CONTROL,'c')  # 复制

调用JS方法

用法:driver.execute_script(js代码)
修改只读属性,如:driver.execute_script('document.getElementById(\\'su\\').readOnly=0;')
移动到页面底部

driver.excute_script("window.scrollTo(0,document.body.scrollHeight)")

注:本文是本人工作中学习及使用到的selenium常用方法,如有错误之处欢迎指出

以上是关于Web自动化工具Selenium常用方法(Python)的主要内容,如果未能解决你的问题,请参考以下文章

常用免费的自动化测试工具汇总

软件测试常用的工具都有哪些?

谁能对比下几款常用的自动化测试工具的优缺点啊? 比如Selenium、QTP、TestWriter等等~

Selenium常用方法

Selenium2.0+TestNG+Ant+Jenkins自动化测试浅尝

常用的软件测试工具