python + selenium相关事件和元素定位
女友由于工作上的失误,将公司RDM中的某一字段的2000条数据给删除了.....就算是重新添加字段,但是与其他数据的关联性已经不在了。由于每天的数据修改量大,有关部门不愿意恢复数据库,因此只能一条条的手动添加啦。我看了下添加流程,估计了修改一条信息至少需要30s,那么2000条数据所需要的时间.....数据还在不停的变动,每天上班还有其他事情。身为程序猿的我,只好拿出自动化终极工具Selenium来拯救她了!
一. 元素定位问题
一些基本的元素定位方法,官方文档上面已经有详细的说明了。这里就不啰嗦了,我一般是使用的XPATH定位,写一下我遇到的一些问题。
使用find_element_by_xxx('div')其实都是调用find_element(By.xxx,'div')
以XPATH为例,css,id,class等都是同理
##这是源代码中对find_element_by_xpath的定义
def find_element_by_xpath(self, xpath):
"""
Finds an element by xpath.
:Args:
- xpath - The xpath locator of the element to find.
:Usage:
driver.find_element_by_xpath('//div/td[1]')
"""
return self.find_element(by=By.XPATH, value=xpath)
browser.find_element_by_xpath('//div[@id="home"]/span')
##等价于
browser.find_element(By.XPATH, '//div[@id="home"]/span')
**注: **如果你是想查找某个元素列表的话,例如
ul下的所有li,记得是使用find_elements,而不是find_element.
**注: **如果你想查找ul下的li中符合某一标准的那个li。例如,你想查找所有li中内容为海贼王的那个li:
li = browser.find_element_by_xpath("//ul/li[contains(text(),'海贼王')]")
另外:有时,你需要定位的元素在页面上需要滚动几下才能显示。在我的实践中,这种情况不需要加滚动事件,直接可以通过xpath定位后click()。比如下拉框菜单内容很多的时候,点击下拉框,让下拉菜单显示出来之后,就可以直接定位到所有菜单选项。
二. 使用WebElement.text获取内容问题
文档中的说明:
People often wish to retrieve the innerText value contained within an element. This returns a single string value. Note that this will only return the visible text displayed on the page.
用text获取值,只能获取到当时在页面上能显示出来的值。比如下拉框,想要获取下拉框里面选项的值,需要点击下拉框,将下拉菜单显示出来之后再获取,不然获取的都是空值。
三. iframe问题
iframe中的元素不能直接的定位,需要使用browser.switch_to.frame("frameId")先切换到iframe下,然后定位。
##iframe是内嵌关系,需要到最里层的createFrame中去
browser.switch_to.frame('main')
browser.switch_to.frame('undefined_frame')
browser.switch_to.frame('createFrame')
如果你将这种代码放入到了循环中,记得要在每一个循环开始或结束后加上browser.switch_to.default_content()还原到顶层html
for i in range(10):
browser.switch_to.default_content()
browser.switch_to.frame('main')
browser.switch_to.frame('undefined_frame')
browser.switch_to.frame('createFrame')
##
# 定位createFrame中的元素
# ...
###
四. ElementNotVisibleException等异常
好多次碰到这种异常,还有can not clickable这种异常,明明是存在的元素,在循环运行时突然就来了这么个异常,原因估计是因为浏览器的速度跟不上程序运行的速度,导致程序已经开始搜索某个元素时,浏览器还没有解析完成,就会导致各种异常,使用time.sleep(2)来休眠一下一般都可以解决问题,但是使用browser.implicitly_wait(2)好像不行。
python + selenium相关事件和元素定位的更多相关文章
- python+selenium 环境搭建以及元素定位
在给公司同事给培训了WEB自动化框架,现在和大家分享交流下
- [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位
无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- 关于selenium的8种元素定位
selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...
- Selenium+Python系列(二) - 元素定位那些事
一.写在前面 今天一实习生小孩问我,说哥你自动化学了多久才会的,咋学的? 自学三个月吧,真的是硬磕呀,当时没人给讲! 其实,学什么都一样,真的就是你想改变的决心有多强罢了. 二.元素定位 这部分内容可 ...
- appium+python搭建自动化测试框架_Appium元素定位(二)
Appium元素定位: 工具:Android\android-sdk\tools uiautomatorviewer.bat 1. id定位: self.driver.find_element_ ...
- python selenium ——— 动态id、class定位
什么样的是动态id呢? 动态id就是第一次点击显示的id与二次点击显示的不一样,一般是元素属性中包含一段数字的这种情况. 类似这种: 1 <input type="button&quo ...
- Selenium基本用法以及元素定位
一.Selenium 简介 Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗口跳 ...
- python selenium --鼠标事件
转自:http://www.cnblogs.com/fnng/p/3288444.html 本节重点: ActionChains 类 context_click() 右击 double_click( ...
随机推荐
- Maven-008-Nexus 私服部署发布报错 Failed to deploy artifacts: Failed to transfer file: ... Return code is: 4XX, ReasonPhrase: ... 解决方案
我在部署构件至 maven nexus 私服时,有时会出现 Failed to deploy artifacts: Failed to transfer file: ... Return code i ...
- LeetCode Strobogrammatic Number
原题链接在这里:https://leetcode.com/problems/strobogrammatic-number/ 题目: A strobogrammatic number is a numb ...
- Unit04 - 继承的意义(下) 、 访问控制 、 static和final
Unit04 - 继承的意义(下) . 访问控制 . static和final 1.方法的重写(Override):重新写.覆盖 1)发生在父子类中,方法名称相同,参数列表相同,方法体不同 2 ...
- vim - multiple windows
https://www.cs.oberlin.edu/~kuperman/help/vim/windows.html
- Salted hash password
参考文档 http://www.cnblogs.com/richardlee/articles/2511321.html https://en.wikipedia.org/wiki/Salt_%28c ...
- erlang httpc
1,set proxy 10.100.1.76 :8888 httpc:set_options([{proxy,{{"10.100.1.76",8888},[]}}]). 2,se ...
- 获取Python安装目录
>>> import sys>>> path=sys.executable>>> print (path)C:\Users\jumz-G\AppD ...
- servletFileUpload
引用:http://bbs.csdn.net/topics/390290685?page=1 Java code? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Linq To Sqlite 一一二二
说在前头 之所以写下这些文字,主要是因为使用LINQ的同志们都觉它的美好(至于有多美好,各位心里知道,我就不在描述了,如果你是你还不了解LINQ,园子里有大把的文章),微软老哥只提供了自家的SQLSe ...
- C++嵌套多个命名空间举例
首先在结构上是能经得起推敲的,举个例子: test.h #pragma region 嵌套多个命名空间举例 namespace Group { namespace C ...