女友由于工作上的失误,将公司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相关事件和元素定位的更多相关文章

  1. python+selenium 环境搭建以及元素定位

    在给公司同事给培训了WEB自动化框架,现在和大家分享交流下

  2. [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位

    无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...

  3. Selenium webdriver 学习总结-元素定位

    Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...

  4. 关于selenium的8种元素定位

    selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...

  5. Selenium+Python系列(二) - 元素定位那些事

    一.写在前面 今天一实习生小孩问我,说哥你自动化学了多久才会的,咋学的? 自学三个月吧,真的是硬磕呀,当时没人给讲! 其实,学什么都一样,真的就是你想改变的决心有多强罢了. 二.元素定位 这部分内容可 ...

  6. appium+python搭建自动化测试框架_Appium元素定位(二)

    Appium元素定位: 工具:Android\android-sdk\tools    uiautomatorviewer.bat 1. id定位: self.driver.find_element_ ...

  7. python selenium ——— 动态id、class定位

    什么样的是动态id呢? 动态id就是第一次点击显示的id与二次点击显示的不一样,一般是元素属性中包含一段数字的这种情况. 类似这种: 1 <input type="button&quo ...

  8. Selenium基本用法以及元素定位

    一.Selenium 简介 Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试.函数非常灵活,能够完成界面元素定位.窗口跳 ...

  9. python selenium --鼠标事件

    转自:http://www.cnblogs.com/fnng/p/3288444.html 本节重点: ActionChains 类 context_click()  右击 double_click( ...

随机推荐

  1. 部署移动BI必须要考虑的五大因素

    随着大屏智能手机和平板电脑的普及,商业智能分析应用程序也需要移动化.由于用户并不会长时间在办公桌前工作.在新的设备以及新的用户的共同促进下,移动BI即将成为主流. 但是,所有人都应该清楚这样一个事实: ...

  2. HTTPS强制安全策略-HSTS协议阅读理解

    https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security [阅读理解式翻译,非严格遵循原 ...

  3. java权限修饰符

  4. bzoj2729 [HNOI2012]排队

    组合数学,推一下式子,并不难推. java代码 import java.io.*; import java.math.BigInteger; import java.util.*; public cl ...

  5. html,移动端代码

    <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale= ...

  6. asp批量查询

    在做asp查询时候 借鉴的一些代码 留个纪念....... <!-- #include file="conn.asp"--> <html> <head ...

  7. windows+caffe(四)——创建模型并编写配置文件+训练和测试

    1.模型就用程序自带的caffenet模型,位置在 models/bvlc_reference_caffenet/文件夹下, 将需要的两个配置文件,复制到myfile文件夹内 2. 修改solver. ...

  8. python : jquery实现左侧菜单

    左侧菜单 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...

  9. Eclipse建立Maven项目后无法建立src/main/java资源文件夹

    在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE System Library,选择workspace default jre就可以了.

  10. VIM 常用错误解决

    1.option ‘omnifunc’ is not set 错误: vim7下Omni completion默认情况下是没有开启的,有时候自定义的vimrc文件会实现自动补齐,例如vim-autoc ...