目录

一、浏览器控制方法

二、元素定位的方法

1、id定位

2、name定位

3、class定位

4、tag定位

5、link_text定位

6、partial_link_text定位

7、XPath定位

8、CSS定位

9、复数定位

三、针对元素的常见操作方法

四、举例

五、遇到的问题


一、浏览器控制方法

1、打开网页

from selenium import webdriver
driver = webdriver.Chrome()

2、页面刷新

driver.refresh()

3、访问地址

driver.get("http://www.baidu.com")

4、页面切换

driver.back() #返回上一页
driver.forward() #切换到下一页

5、设置窗口大小

driver.set_window_size(540,960) #设置窗口大小
driver.maximize_window() #设置窗口占满整个屏幕

6、截屏

driver.get_screenshot_as_file("D:\")

7、退出

driver.close() #关闭当前窗口
driver.quit() #关闭浏览器进程

8、设置休眠

time.sleep(3)

二、元素定位的方法

以下8种是通过元素的属性直接定位:

1、id定位

find_element_by_id(self, id_)

2、name定位

find_element_by_name(self, name)

3、class定位

find_element_by_class_name(self, name)

4、tag定位

find_element_by_tag_name(self, name)

说明:简单明了可以看到id、name、class、tag且同一界面不重复的元素,可以直接通过以上四个id、name、classname、tagname的方式定位。比如说,在用户登录界面中,用户名输入的文本框定位如下:

那我们就可以通过它的name属性去定位这个元素,如下:

driver.find_element_by_name('userName')

5、link_text定位

find_element_by_link_text(self, link_text)

6、partial_link_text定位

find_element_by_partial_link_text(self, link_text)

说明:导航栏、超链接等可以用以上两种方式定位,如下这个元素包含href="https://blog.csdn.net/wxt_hillwill?spm=1000.2115.3001.5343",说明它是个超链接:

那我们就可以通过它的link_text属性去定位这个元素,如下:

self.driver.find_element_by_link_text('wxt_hillwill的博客_CSDN博客')

或者:

self.driver.find_element_by_partial_link_text('wxt_hillwill的博客')

7、XPath定位

find_element_by_xpath(self, xpath)

说明:① 可以直接鼠标右击元素,选择Copy->Copy XPath,导出元素完整的XPath后直接定位:

② 也可以通过元素中的id、name、class去定位,但要确保它在这个页面上是唯一的,像下面这样:

driver.find_element_by_xpath("//*[@class='btn login-button ng-scope']")

③ 如果一个元素的属性不明显,无法直接定位,这时候我们可以先找它的父元素,再找下个层级。也就是通过xpath的父子层级定位方式去定位元素。

如下通过‘登录’按钮的父元素去定位‘登录’这个‘button’:

父元素的xpath为:

//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]

通过父元素定位‘登录’这个‘button’:

driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button")

④ xpath逻辑运算定位方式,可以多个属性逻辑运算的,可以支持与(and)、或(or)、非(not)。一般用的比较多的是and运算,找到同时满足2个属性的元素。

这个我还没用过。

⑤ xpath的模糊定位方式:contains、starts-with、ends-with、matchs。比如下面这个元素我一直定位不到,最后用了模糊定位方式,方法如下:

driver.find_element_by_xpath("//*[contains(text(), '确定')]")

8、CSS定位

find_element_by_css_selector(self, css_selector)

说明:① 可以鼠标右击元素,选择Copy->Copy selector,导出元素的CSS后直接定位。

② 也可以通过元素中的id、class、标签去定位,需要注意的是:

css用 #号表示id属性;

css用 .表示class属性;

css直接用标签名称表示标签属性;

故如下这个元素的CSS定位方式为:

driver.find_element_by_css_selector('.btn.btn-es-red.ng-scope')

③ css还支持标签和属性组合,像这个样子:

driver.find_element_by_css_selector("button.btn.btn-es-red.ng-scope")

④ css同样也可以实现逻辑运算,同时匹配两个属性,这里跟xpath不一样,无需写and关键字。不过我还没有用过,所以没有例子。

⑤ css也支持层级关系,这是上面用xpath写的层级定位:

driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button")

现在我们给它改成css的格式,就是这个样子:

driver.find_element_by_css_selector("#app>div.login.ng-scope>div.ng-include>div>div>div>form>div.login-form-container>button")

9、复数定位

以上8种都有复数形式,区别是复数形式定位返回的是一个list队列,然后还需要从这个队列中找到需要的元素:

id复数定位find_elements_by_id(self, id_)
name复数定位find_elements_by_name(self, name)
class复数定位find_elements_by_class_name(self, name)
tag复数定位find_elements_by_tag_name(self, name)
link复数定位find_elements_by_link_text(self, text)
partial_link复数定位find_elements_by_partial_link_text(self, link_text)
xpath复数定位find_elements_by_xpath(self, xpath)
css复数定位find_elements_by_css_selector(self, css_selector)

三、针对元素的常见操作方法

clear 清除元素的内容
send_keys 模拟按键输入
click 点击元素
submit 提交表单
size 获取元素的尺寸
text 获取元素的文本
get_attribute(name) 获取属性值
location 获取元素坐标,先找到要获取的元素,再调用该方法
page_source 返回页面源码
driver.title 返回页面标题
current_url 获取当前页面的URL
is_displayed() 设置该元素是否可见
is_enabled() 判断元素是否被使用
is_selected() 判断元素是否被选中
tag_name 返回元素的tagName
context_click(elem) 右击鼠标点击元素elem,另存为等行为
double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能
drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放
move_to_element(elem) 鼠标移动到一个元素上
click_and_hold(elem) 按下鼠标左键在一个元素上
perform() 在通过调用该函数执行ActionChains中存储行为
send_keys(Keys.ENTER) 按下回车键
send_keys(Keys.TAB) 按下Tab制表键
send_keys(Keys.SPACE) 按下空格键space
send_keys(Kyes.ESCAPE) 按下回退键Esc
send_keys(Keys.BACK_SPACE) 按下删除键BackSpace
send_keys(Keys.SHIFT) 按下shift键
send_keys(Keys.CONTROL) 按下Ctrl键
send_keys(Keys.ARROW_DOWN) 按下鼠标光标向下按键
send_keys(Keys.CONTROL,‘a’) 组合键全选Ctrl+A
send_keys(Keys.CONTROL,‘c’) 组合键复制Ctrl+C
send_keys(Keys.CONTROL,‘x’) 组合键剪切Ctrl+X
send_keys(Keys.CONTROL,‘v’) 组合键粘贴Ctrl+V

四、举例

import unittest2
import selenium import webdriverclass webcheck(unittest2.TestCase):"""界面登录测试"""@classmethoddef setUp(cls):# 打开浏览器cls.driver = webdriver.Chrome()# 将浏览器设置为占满整个屏幕cls.driver.maxmize_window()#访问网页cls.driver.get('https://xxx')def test_openit(self):# 找到name为userName的元素,并输入用户名hillwill_wxtself.driver.find_element_by_name("userName").send_keys("hillwill_wxt")# 找到name为password的元素,并输入密码123456self.driver.find_element_by_name("password").send_keys("123456")# 点击登录按钮self.driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button").click()@classmethoddef tearDown(cls):cls.driver.close()if __name__=='__main__':unittest2.main()

五、遇到的问题

问题描述:click()点击按钮没有反应

解决方法:click()点击按钮没有反应时,讲click()改为Enter操作通常可以解决问题。例如,将以下代码

# 点击登录按钮
self.driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button").click()

改为

# 点击登录按钮
Element el = self.driver.find_element_by_xpath("//*[@id='app']/div[2]/div/ng-include/div/div/div/form/div[2]/button")
el.sendKeys(keys.ENTER)

selenium+unittest自动化测试(二)---浏览器控制及元素定位的方法相关推荐

  1. 自动化(二)——八种元素定位方法

    自动化(二) 一.元素定位 1)如何元素定位 二.元素定位方式 1)id定位 2)name定位 3) class_name定位 4) tag_name定位 5) link_text以及partial_ ...

  2. selenium+unittest自动化测试(一)---环境搭建及用例编写规则

    目录 一.selenium.unittest简介 二.环境搭建 1.安装selenium库 2.安装unittest2框架 3.安装浏览器驱动 三.编写规则 1.测试类 2.以test开头 3.set ...

  3. web自动化学习之selenium安装喝浏览器驱动和元素定位

    selenium安装卸载 安装 pip install selenium 查看 pip show selenium 卸载 pip uninstall selenium 快捷键: ctrl+alt+sp ...

  4. python+selenium+unittest自动化测试框架

    前言 关于自动化测试的介绍,网上已有很多资料,这里不再赘述,UI自动化测试是自动化测试的一种,也是测试金字塔最上面的一层,selenium是应用于web的自动化测试工具,支持多平台.多浏览器.多语言来 ...

  5. Python + Selenium + UnitTest自动化测试面试题目整理

    1.如何使用Selenium进行自动化测试 ? 结合Python + Selenium + UnitTest 2.自动化测试框架 分层+PO模式: 包含基础封装层BasePage.PO页面对象层.Te ...

  6. selenium课程笔记3-使用selenium中的webdriver对浏览器操作-页面元素定位及操作

    1.打开浏览器,打开网页 1 from selenium import webdriver 2 dr=webdriver.Chrome() 3 dr.get('http://www.baidu.com ...

  7. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  8. python+selenium自动化(四)__八大元素定位之class_name、tag_name、partial_link_text、css_selector

    selenium八大元素定位(二) 上节讲了4种定位ID.NAME.LINK_TEXT.XPATH,这节继续学习剩下的4种元素定位方式 1.通过class_name定位 我们需定位上图中的" ...

  9. APP自动化测试系列之3种元素定位工具

    VOL 179 30 2020-11 今天距2021年31天 这是ITester软件测试小栈第179次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

最新文章

  1. jsp验证身份证号并自动计算年龄和出生日期
  2. Spring Boot错误处理机制以及定制自己的错误页面
  3. 在 asp.net mvc中的简单分页算法 (续)
  4. 4月22日(牛马不对嘴)
  5. 创建一个springMVC项目总结
  6. WGAN新方案:通过梯度归一化来实现L约束
  7. C#如何用正则表达式截取https和带端口的域名
  8. (小白)函数一: 声明函数的方法—语句定义法和表达式定义法的区别
  9. 2016计算机知识点,2016年计算机一级考试知识点
  10. Ubuntu 12.04忘记登录密码及修改密码
  11. Matlab 编程 《计算流体力学基础及应用(约翰D安德森)》 亚声速-超声速等熵喷管流动CFD解法 拉瓦尔喷管 守恒形式方程解法
  12. 开学蓝牙耳机选哪个?音质好的蓝牙耳机排行
  13. 微型计算机原理DL,微机原理试题
  14. php对接抖音小程序担保支付/头条小程序担保支付
  15. 【学习笔记 31】 buu [0CTF 2016]piapiapia
  16. DEFCON携手百度安全落地中国,打造国际化网络安全交流平台
  17. 【论文写作】Word文档中的MathType公式大小不一导致版面很难看完美解决方法
  18. 【每日一库】ppcp - 带进度条的拷贝工具
  19. 跳跃游戏 (贪心/动态规划/dfs)
  20. 软件公司项目经理岗位职责

热门文章

  1. python try except 嵌套_try except嵌套之异常的传递
  2. python实时数据存储与显示_利用python进行数据加载和存储
  3. 计算机丢失winmm.dll,winmm.dll
  4. .wav格式的声音文件怎么变成matlab 中的.mat文件
  5. Dell PowerEdge - 如何配置 iDRAC9 和生命周期控制器网络 IP
  6. Maven学习总结(57)—— 如何提高 Maven 的构建速度?maven-mvnd 又是什么鬼?
  7. 人民日报谈焦虑成社会常见病:好的人生需要文火慢炖
  8. Netty学习总结(3)——Netty百万级推送服务
  9. php 截取base64内容,PHP-从长文本中删除Base64字符串
  10. mysql备份到制定目录_写一个脚本定时自动备份mysql到指定目录