一. 定位元素方法

官网地址:http://selenium-python.readthedocs.org/locating-elements.html
        这里有各种策略用于定位网页中的元素(locate elements),你可以选择最适合的方案,Selenium提供了一下方法来定义一个页面中的元素:

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector

下面是查找多个元素(这些方法将返回一个列表):

  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

除了上面给出的公共方法,这里也有两个在页面对象定位器有用的私有方法。这两个私有方法是find_element和find_elements。
        常用方法是通过xpath相对路径进行定位,同时CSS也是比较好的方法。举例:

[html] view plaincopy
  1. <html>
  2. <body>
  3. <form id="loginForm">
  4. <input name="username" type="text" />
  5. <input name="password" type="password" />
  6. <input name="continue" type="submit" value="Login" />
  7. <input name="continue" type="button" value="Clear" />
  8. </form>
  9. </body>
  10. <html>

定位username元素的方法如下:

[python] view plaincopy
  1. username = driver.find_element_by_xpath("//form[input/@name='username']")
  2. username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
  3. username = driver.find_element_by_xpath("//input[@name='username']")

[1] 第一个form元素通过一个input子元素,name属性和值为username实现
        [2] 通过id=loginForm值的form元素找到第一个input子元素
        [3] 属性名为name且值为username的第一个input元素

二. 操作元素方法

在讲述完定位对象(locate elements)之后我们需要对该已定位对象进行操作,通常所有的操作与页面交互都将通过WebElement接口,常见的操作元素方法如下:

  • clear 清除元素的内容
  • send_keys 模拟按键输入
  • click 点击元素
  • submit 提交表单

举例自动访问FireFox浏览器自动登录163邮箱。

[python] view plaincopy
  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. import time
  4. # Login 163 email
  5. driver = webdriver.Firefox()
  6. driver.get("http://mail.163.com/")
  7. elem_user = driver.find_element_by_name("username")
  8. elem_user.clear
  9. elem_user.send_keys("15201615157")
  10. elem_pwd = driver.find_element_by_name("password")
  11. elem_pwd.clear
  12. elem_pwd.send_keys("******")
  13. elem_pwd.send_keys(Keys.RETURN)
  14. #driver.find_element_by_id("loginBtn").click()
  15. #driver.find_element_by_id("loginBtn").submit()
  16. time.sleep(5)
  17. assert "baidu" in driver.title
  18. driver.close()
  19. driver.quit()

首先通过name定位用户名和密码,再调用方法clear()清除输入框默认内容,如“请输入密码”等提示,通过send_keys("**")输入正确的用户名和密码,最后通过click()点击登录按钮或send_keys(Keys.RETURN)相当于回车登录,submit()提交表单。
        PS:如果需要输入中文,防止编码错误使用send_keys(u"中文用户名")。

三. WebElement接口获取值

通过WebElement接口可以获取常用的值,这些值同样非常重要。

  • size 获取元素的尺寸
  • text 获取元素的文本
  • get_attribute(name) 获取属性值
  • location 获取元素坐标,先找到要获取的元素,再调用该方法
  • page_source 返回页面源码
  • driver.title 返回页面标题
  • current_url 获取当前页面的URL
  • is_displayed() 设置该元素是否可见
  • is_enabled() 判断元素是否被使用
  • is_selected() 判断元素是否被选中
  • tag_name 返回元素的tagName

举例代码如下:

[python] view plaincopy
  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. import time
  4. driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")
  5. driver.get("http://www.baidu.com/")
  6. size = driver.find_element_by_name("wd").size
  7. print size
  8. #尺寸: {'width': 500, 'height': 22}
  9. news = driver.find_element_by_xpath("//div[@id='u1']/a[1]").text
  10. print news
  11. #文本: 新闻
  12. href = driver.find_element_by_xpath("//div[@id='u1']/a[2]").get_attribute('href')
  13. name = driver.find_element_by_xpath("//div[@id='u1']/a[2]").get_attribute('name')
  14. print href,name
  15. #属性值: http://www.hao123.com/ tj_trhao123
  16. location = driver.find_element_by_xpath("//div[@id='u1']/a[3]").location
  17. print location
  18. #坐标: {'y': 19, 'x': 498}
  19. print driver.current_url
  20. #当前链接: https://www.baidu.com/
  21. print driver.title
  22. #标题: 百度一下, 你就知道
  23. result = location = driver.find_element_by_id("su").is_displayed()
  24. print result
  25. #是否可见: True

其中图片解释如下图所示。

四. 鼠标操作

在现实的自动化测试中关于鼠标的操作不仅仅是click()单击操作,还有很多包含在ActionChains类中的操作。如下:

  • context_click(elem) 右击鼠标点击元素elem,另存为等行为
  • double_click(elem) 双击鼠标点击元素elem,地图web可实现放大功能
  • drag_and_drop(source,target) 拖动鼠标,源元素按下左键移动至目标元素释放
  • move_to_element(elem) 鼠标移动到一个元素上
  • click_and_hold(elem) 按下鼠标左键在一个元素上
  • perform() 在通过调用该函数执行ActionChains中存储行为

举例如下图所示,获取通过鼠标右键另存为百度图片logo。代码:

[python] view plaincopy
  1. import time
  2. from selenium import webdriver
  3. from selenium.webdriver.common.keys import Keys
  4. from selenium.webdriver.common.action_chains import ActionChains
  5. driver = webdriver.Firefox()
  6. driver.get("http://www.baidu.com")
  7. #鼠标移动至图片上 右键保存图片
  8. elem_pic = driver.find_element_by_xpath("//div[@id='lg']/img")
  9. print elem_pic.get_attribute("src")
  10. action = ActionChains(driver).move_to_element(elem_pic)
  11. action.context_click(elem_pic)
  12. #重点:当右键鼠标点击键盘光标向下则移动至右键菜单第一个选项
  13. action.send_keys(Keys.ARROW_DOWN)
  14. time.sleep(3)
  15. action.send_keys('v') #另存为
  16. action.perform()
  17. #获取另存为对话框(失败)
  18. alert.switch_to_alert()
  19. alert.accept()

效果如下图所示,通过xpath定位到图片位置并右击鼠标,在弹出的菜单中选择“另存为图片”。但是如何点击“另存为对话框”的“保存”按钮是个难点,目前刚学习阶段,境界没到无法解决。原因:
        WebDriver cannot directly interact with dialog windows this is because dialog windows are the domain of the operating system and not the webpage.

  

        该部分推荐参考资料:
            selenium 右键下载图片,结合sikuli - tobecrazy
            Selenium WebDriver 中鼠标和键盘事件分析及扩展
            Selenium Windows Save/Open Open Dialouge - StackOver
            书籍《selenium2 python自动化测试》 作者:虫师

五. 键盘操作

参考:http://selenium-python.readthedocs.org/api.html
        前面讲述了鼠标操作,现在讲述键盘操作。在webdriver的Keys类中提供了键盘所有的按键操作,当然也包括一些常见的组合键操作如Ctrl+A(全选)、Ctrl+C(复制)、Ctrl+V(粘贴)。更多键参考官方文档对应的编码。

  • 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

这里使用的例子参考虫师的书籍《selenium2 Python自动化测试》,推荐该书给大家。代码还是非常有意思的,大家自己去感受下吧~

[python] view plaincopy
  1. #coding=utf-8
  2. import time
  3. from selenium import webdriver
  4. from selenium.webdriver.common.keys import Keys
  5. driver = webdriver.Firefox()
  6. driver.get("http://www.baidu.com")
  7. #输入框输入内容
  8. elem = driver.find_element_by_id("kw")
  9. elem.send_keys("Eastmount CSDN")
  10. time.sleep(3)
  11. #删除一个字符CSDN 回退键
  12. elem.send_keys(Keys.BACK_SPACE)
  13. elem.send_keys(Keys.BACK_SPACE)
  14. elem.send_keys(Keys.BACK_SPACE)
  15. elem.send_keys(Keys.BACK_SPACE)
  16. time.sleep(3)
  17. #输入空格+"博客"
  18. elem.send_keys(Keys.SPACE)
  19. elem.send_keys(u"博客")
  20. time.sleep(3)
  21. #ctrl+a 全选输入框内容
  22. elem.send_keys(Keys.CONTROL,'a')
  23. time.sleep(3)
  24. #ctrl+x 剪切输入框内容
  25. elem.send_keys(Keys.CONTROL,'x')
  26. time.sleep(3)
  27. #输入框重新输入搜索
  28. elem.send_keys(Keys.CONTROL,'v')
  29. time.sleep(3)
  30. #通过回车键替代点击操作
  31. driver.find_element_by_id("su").send_keys(Keys.ENTER)
  32. time.sleep(3)
  33. driver.quit()

python Selenium 常见操作 元素定位相关推荐

  1. Python+selenium自动化八大元素定位方法及实例(超详细)

    目录 一.selenium模块中的find_element_by_id方法无法使用 二.Python+selenium自动化八大元素定位方法 使用场景: 1.通过id属性定位:driver.find_ ...

  2. python网页元素定位_用Selenium进行网页元素定位以及常用的定位元素的方法

    用Selenium进行网页元素定位 一.前提条件: 下载.安装Selenium 二.编写定位网页元素的脚本(这里以定位百度网页的元素举例) 1.新建文本文档(可以用任意的文本编辑器,我这里用的是Pyc ...

  3. 【转载】selenium webdriver进行元素定位

    原文:http://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或fi ...

  4. 使用selenium webdriver进行元素定位

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  5. 49个Python的常见操作/技巧/例子

    17个Python的常见操作/技巧 很多读者都知道 Python 是一种高级编程语言,其设计的核心理念是代码的易读性,以及允许编程者通过若干行代码轻松表达想法创意. 实际上,很多人选择学习 Pytho ...

  6. Selenium自动化测试-3.元素定位(3)

    ------·今天距2020年81天·------ 这是ITester软件测试小栈第55次推文 大家好 我是vivi小胖虎 前面已经介绍过7种元素定位方法 相信这些积攒堆积起来的技巧 都会在实际工作时 ...

  7. Selenium自动化测试-3.元素定位(2)

    ------·今天距2020年82天·------ 这是ITester软件测试小栈第54次推文 大家好 我是vivi小胖虎 今天我们学习xpath定位元素 如果你告诉我 不是你不想用selenium做 ...

  8. python语法元素测试_基于python全局设置id 自动化测试元素定位过程解析

    背景: 在自动化化测试过程中,不方便准确获取页面的元素,或者在重构过程中方法修改造成元素层级改变,因此通过设置id准备定位. 一.python准备工作: 功能:用自动化的方式进行批量处理. 比如,你想 ...

  9. Python Selenium.WebDriver 判断元素是否存在

    Python Selenium.WebDriver 判断元素是否存在 文章目录 Python Selenium.WebDriver 判断元素是否存在 一.判断元素是否存在 二.异常捕获 三.多元素捕获 ...

最新文章

  1. 补充cpusim图片
  2. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)
  3. 两个数据库字符集不一样,如何快速增量同步数据.
  4. 【UML】用例图Use Case diagram(转)
  5. 设计师喜欢收集各种各样的笔刷来喽,不必倾家倾产就能像创造出令人惊叹的设计。
  6. vue3.0 vuex 全局变量 存储更改
  7. mathematic语法基础
  8. 运算放大器参数的详细解释和分析-运放压摆率(SR)
  9. 数模学习(七)--- 多元线性回归
  10. 读书百客:《白马篇》赏析一
  11. 三星a5009Android6.0,三星A5009 6.0 root教程及获取6.0的root权限
  12. layaair的TS版本报错问题
  13. vb.net 教程 1-9 数组3-1 数组的合并
  14. 软件测试的分类有哪些?
  15. 《Hidden Markov Map Matching Through Noise and Sparseness》读书笔记
  16. 文章详情页----- 详细步骤
  17. html上上上级目录,html如何表示上级目录
  18. html随机出现一张图片,图片随机飘动用html怎么做
  19. 如何做一个基于python校园鲜花水果商城系统毕业设计毕设作品(Django框架)
  20. 《物联网技术》课程笔记——第三章 物联网感知技术之传感技术

热门文章

  1. 【LeetCode每天一题】Generate Parentheses(创造有效的括弧)
  2. 变态跳台阶,很难很难,终于想出来了,附推导过程,为自己鼓掌
  3. 设计模式学习(二): 观察者模式 (C#)
  4. qcom Android Camera【转】
  5. java 面试基础题 引用
  6. Linux安装Android开发环境
  7. No Maybe Please
  8. go 连接 kafka 写 mysql
  9. PhpStorm函数注释的设置
  10. Swoole 源码分析——Server模块之OpenSSL(下)