关闭
 selenium webdriver缺陷

除了http://573301735.com/?p=5126讲 的,昨天又发现一个让我1个小时生不如死的问题,就是使用两个不同的配置文件来初始化driver,findelement方法获取到的坐标居然不一样, 使用其中一个配置文件初始化的driver因为获取的坐标是错误的导致click后没任何反应。搜遍引擎没有发现任何答案。看到一个方法,虽然不能解决我 目前的问题,难保以后用不上,记录一下:

最近在使用Selenium
Webdriver(Selenium2.0)进行界面自动化测试的时候发现单击事件无效,通过driver.findElement的方式是可以找到
click元素的,但是就是click之后无任何反应。
研究之后发现原来是click的时候已经失去该焦点了,解决办法是先找另外的元素,再来找这个元素,例如:

driver.findElement(By.linkText(name)).findElement(By.xpath("..")).click();
driver.findElement(By.linkText(name)).click();

selenium webdriver的硬伤在于它无法真正判断页面上的元素什么时候能生成完毕,换句话说
,假如获取页面上的元素失败,而这个元素是由js,ajax生成并且是未知的情况下(例如:要抓取网页关键词,但是关键词的内容是什么,一共有几个都是未
知的情况下) 你无法判断是元素尚未被生成还是页面原本就没有这个元素导致的获取失败。

刚才说webdriver无法真正判断页面元素生成完毕,但webdriver提供了判断页面是否加载完成的方法,只不过这个加载完成的含义是页面上的
html和JS代码加载完成,但js,ajax还可能在html和JS加载完之后执行从而改变页面上的内容,所以像刚才举例的网页上的关键词抓取失败就很
难判断是js,ajax没有运行完毕还是页面上原本就没有这个元素导致的。

虽然selenium
webdriver没有提供判断页面上的js,ajax是否执行完毕的功能,但不等于完全没有办法判断。官方也承认并不是不可以而是非常困难。昨天群里一
位高手也说这种情况需要自行查看页面上的动态脚本代码以得知判断页面执行完的条件。我相信一个第三方库是比较难做到这一点的,即使牛逼到能实现,也不排除
页面上有一个持续或者定时与服务器通信的动态脚本在实时改变页面内容,这样一来页面永远没有生成完毕的那一刻。

对于刚才说的抓取页面上未知元素,目前普遍的做法是在程序里面显示指定等待一段时间,确保有足够的时间让它生成,当然,不排除网络太差直到等待超时也来不
及生成的情况。如果元素已知,可以显示用selenium webdriver提供的方法显示等待某一个元素在页面上出现后再继续执行下面的代码。

selenium webdriver缺陷的更多相关文章

  1. 转载 基于Selenium WebDriver的Web应用自动化测试

    转载原地址:  https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...

  2. Selenium WebDriver Code

    Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...

  3. 使用httpclient 调用selenium webdriver

    结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...

  4. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  5. Selenium Webdriver java 积累一

    Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...

  6. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  7. Selenium Webdriver下click失效问题解决

    最近在使用Selenium Webdriver(Selenium2.0)进行界面自动化测试的时候发现单击事件无效,通过driver.findElement的方式是可以找到click元素的,但是就是cl ...

  8. 如何用selenium webdriver 捕获js error

    ### 问题 捕捉页面上js error ### 解决办法 从Selenium webdriver log 中解析 # -*- coding:utf8 -*- import unittest from ...

  9. Selenium WebDriver 之 PageObjects 模式 by Example

    目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...

随机推荐

  1. Bee Framework_百度百科

    Bee Framework_百度百科 Bee Framework 编辑   目录 1详细信息 简介 特性 2工作 主要模块 编译要求 运行要求 目录结构 运行例程 安装步骤     1详细信息 简介 ...

  2. linux-0.11抠代码-bootsect

    //bootfun.s .global asm_message .global asm_memmove .global asm_readsector .global asm_checkLBA .cod ...

  3. Android ListView条目全选功能,不用checkbox实现!

    大家好,翻了翻曾经的笔记,发现了一个我特别标记的功能,那就是ListView全选功能,顿时想起了我那个时候苦逼的生涯,因为我大学机械出身,大学毕业了都不知道什么叫代码,在58干了一段销售.实在是干不下 ...

  4. Android中Parcelable序列化总结

    在使用Parcelable对android中数据的序列化操作还是比较有用的,有人做过通过对比Serializable和Parcelable在android中序列化操作对象的速度比对,大概Parcela ...

  5. 在Centos 5.4上安装Mysql5.5.10 (整理以前的工作文档)

    1.     安装环境 1.1.  目的 安装Mysql5.5.10服务,提供公司XXXX测试环境.正式环境也采用该版本的mysql 1.2. 硬件环境 PC机:IntelE5300 内存4G 硬盘5 ...

  6. Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

    1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...

  7. 1.0.3-学习Opencv与MFC混合编程之---打开本地摄像头

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961643 版本1.0.3新增内容 打开摄像头 Ø 新建菜单项,Learning OpenCV——&g ...

  8. Linux 二层协议架构组织

    本文主要讲解了Linux 二层协议架构组织,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了Linux 二层协议架构组织,希望可以对大家有所帮助 ...

  9. python发送post和get请求

    python发送post和get请求 get请求: 使用get方式时,请求数据直接放在url中. 方法一. import urllib import urllib2 url = "http: ...

  10. 如何让DbGrid支持鼠标滚轮滚动

    如何让DbGrid支持鼠标滚轮滚动 在主窗体上加一个ApplicationEvents控件(控件在Additional面板中), 在它的OnMessage事件中加入下述代码,一切搞定-! proced ...