女友由于工作上的失误,将公司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. [BS-28] iOS中分页的几种算法

    iOS中分页的几种算法 总记录数:totalRecord 每页最大记录数:maxResult 算法一: totalPage = totalRecord % maxResult == 0 ? total ...

  2. 【转】SQLServerDBA十大必备工具---让生活轻松点

    曾经和一些DBA和数据库开发人员交流时,问他们都用过一些什么样的DB方面的工具,大部分人除了SSMS和Profile之外,基本就没有使用过其他工具了: 诚然,SSMS和Profile足够强大,工作的大 ...

  3. 翻译:Lisp Style Tips for the Beginner - Heinrich Taube

    原文:Lisp Style Tips for the Beginner 本篇文章是一篇非正式的摘要,旨在帮助新手写出高效.易读的Lisp代码. 1 赋值   1.1 避免使用eval.赋值是Lisp内 ...

  4. svg学习(四)circle

    <circle> 标签 < <?xml version="1.0" standalone="no"?> <!DOCTYPE ...

  5. ligerui_ligerTree_005_动态增加“树”节点

    动态添加ligerTree节点:效果图: 源码地址:http://download.csdn.net/detail/poiuy1991719/8571255 <%@ page language= ...

  6. android手电筒(摇一摇也可开启手电筒)

    package com.firefly.myflashlight; import android.app.Activity; import android.hardware.Camera; impor ...

  7. android抽屉总结

    android抽屉:1.DrawerLayout 在xml文件中要注意写全称:android.support.v4.widget.DrawerLayout <LinearLayout /> ...

  8. 【转】eclipse安装SVN插件的两种方法

    转载地址:http://welcome66.iteye.com/blog/1845176 eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录 ...

  9. AsyncTask的缺陷和注意事项

    1. AsyncTask 主要是用来处理后台耗时操作,并将数据更新到主线程的一个工具类. AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就 ...

  10. Java菜鸟培训第二天

    HTML——超文本标记语言…………… 静态网页:不需要访问数据库. 动态网页:在网上发布的好的,我们能通过网络浏览到的都是动态的,需要访问数据库. <html>--开始标签 <hea ...