关闭
 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. Java EE登陆界面生成随机数防止恶意注册或者登录

    package cn.com; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.a ...

  2. UVA10006 - Carmichael Numbers

    题目链接:UVA10006 本来想直接打素数表,然后根据素数表来判断,结果一直超时,后来把素数表去掉,再在for循环中加判断才勉强过了. Some numbers that are not prime ...

  3. SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy())

    ===================================================== SDL源码分析系列文章列表: SDL2源码分析1:初始化(SDL_Init()) SDL2源 ...

  4. cocos2dx+lua编译Android项目

    一.简单介绍 cocos2dx版本号:3.2 二.问题及解决方式 1.为项目开启Native支持,把项目转为C++项目. 1>.项目开启C++ Native支持,操作例如以下图 watermar ...

  5. .net程序员面试不完全指南

    程序员找工作难,想要被成功聘用更难.最常见的办法是经历一次又一次的面试失败后自己琢磨出面试技巧,当然也可以花钱到一些培训机构去接受专业的书面简历和模拟面试的指导.这些方法可能都会奏效,但是却并不是时间 ...

  6. 快速排序原理、复杂度分析及C语言实现

    本文作者华科小涛:@http://www.cnblogs.com/hust-ghtao/,参考<算法导论>,代码借用<剑指offer> 快速排序是一种最坏情况时间复杂度为的排序 ...

  7. Android 环境变量配置(Mac)

    Mac 系统10.10,自带的就是jdk1.6,因为工作需要就升级到了1.7,要从新配置环境变量了 mac 默认是自带的有jdk1.6 安装路径为: /System/Library/Framework ...

  8. 自绘XP风格菜单

    这是以前写的代码,自绘XP风格的菜单,硬盘坏了后以为没了,最后写的一个软件要自定义风格,“翻箱倒柜”的终于在我可爱的古董机^_^上找到了一个应用的例子.还是把它放到Blog上来,即可共享又可作为备用 ...

  9. Datatable.Compute小技巧

    在个人版机房重构的过程中,大家最发愁的一件事无非就是上下机,结账和报表.那么在结账的过程中,最发愁的是否就数计算日结账单的数据和周结账的数据.还记得在第一遍机房收费系统的过程中用的是for 循环,但是 ...

  10. Mahout-Pearson correlation的实现

    计算公式: 并通过以下代码对Mahout in Action的结果进行了验证: 代码例如以下: ` package com.example.mahout; public class TestColl ...