在进行Selenium自动化过程中,我们很难避免一些webdriver 很难定位到的一些元素(如:默认隐藏属性元素),那对于一些比较难定位到的元素,有什么好的解决办法?

    其实我们都知道,Selenium Webdriver他是支持,在脚本内调用Js脚本的,那JS才是网页元素定位的鼻祖,为什么不试试用JS呢?下面简单通过一个实例,介绍一下,使用JS在火狐控制台中定位元素的小技巧。
    如下图:如何定位京东首页中的【手机、数码、京东通信】—【京东通信】—【自助服务】链接。
这个也是之前群里面朋友自己写Demo遇到的一个问题,那么这个问题很难吗?到底难在什么地方,下面看看这个问题怎么破。

    首页我们使用firebug定位并查看元素所在在HTML代码。

    打开后的HTML代码如下,我们可以清楚看到,HTML中的有个DIV下面代码内容都是灰色的(属性是隐藏的),对于这种HTML标签,Webdriver是无法进行处理的(这也就是问题的难点了),如果一直想着用Selenium Webdriver去定位这个元素的话,确实是难为了webdriver只能默默诉说”臣妾做不到!“。那这个时候,我们就得换个思路去解决这个问题,另找别的方法,那就是通过JS的方法来定位它。

    如上图HTML代码所示,我们要找的元素的【自助服务】链接,他的唯一tag标识就是 a 属性,在京东商务平台页面,链接非常多所以查找到的<a>标签也很多无法通过肉眼去数,所以我们也不能通过一次就定位到它的位置,那么可以考虑通过二次定位,先缩小<a>的范围,然后在进行具体定位。再次自己审查HTML源码,和【自助服务】一起在同一个<dl >下的元素只有三个链接,那么只要我们定位到这个<dl>,在定位【自助服务】就容易多了。
    <dl class="fore2"> 这个dl有className,在控制台中使用className定位看看:
JS脚本:document.getElementsByClassName("fore2")   |(回车)

    通过js脚本,返回了所有的 ClassName="fore2"的元素标识,并且是用逗号隔开的。我们要找的是 dl.fore2的隐藏元素,所以它首先是灰色的(我用红色标识出来了)。然后我们挨个点击查看,他会自动跳转到所在的HTML标签中。当我点到第三个 dl.fore2的时候,发现我找到了【自动服务】所在的标签中,然后我们通过索引ID来,定位到这一层元素。在元素dl.fore2元素列表中,第一表元素开始从0开始数索引,它是第7个元素,所以他的索引ID是6.

JS:document.getElementsByClassName("fore2")[6]
    
    可以直接定位到了我们所要查到的 dl.fore2 元素层,可以点击进去查看,【自助服务】链接标识在这一层中,然后再此基础上,通过tag <a>来定位【自助服务】链接。
JS:document.getElementsByClassName("fore2")[6].getElementsByTagName("a")

    打印出来3个<a>标签,也就是dl.fore2下的3个链接,同样通过索引找到【自助服务】,【自助服务】在第三个链接,所以他的索引ID是2.
JS:document.getElementsByClassName("fore2")[6].getElementsByTagName("a")[2]

找到元素链接后,可以直接调用 click() 方法进行打开这个链接。
document.getElementsByClassName("fore2")[6].getElementsByTagName("a")[2].click()

    下面介绍一个小技巧,可以通过Console查看API,通过dir方法,来查看元素有哪些可以用的方法。比如我们上面的那个【自助服务】链接,如何去看呢,看下图操作。
    我们先将元素内容赋值给变量 a,然后使用 dir(a)方法,进行查看,就会展示出该元素所有可以用的方法。


    另简单看下JS在Console中的使用(详细API请百度),Console可以说是前台开发的神器,他可以自动补齐你要使用的脚本,比如我们在脚本命令行输入 "document"(甚至只输入一个"d")它就会帮你显示出所有以d开头的方法,供你选择使用,document也是我们进行元素定位是常用的方法。


如何借助浏览器Console使用Js进行定位和操作元素的更多相关文章

  1. GSAP JS基础教程--TweenLite操作元素的相关属性

    今天来学习用TweenLite操作元素的各种属性,以Div为例,其他元素的操作也是一样的,只是可能一些元素有它们的特殊属性,就可能不同罢了.   代码里用详细注释,我就不再重复啦,大家看代码就可以啦! ...

  2. selenium定位,操作元素

    1.定位方式 1.id driver.find_element_by_id('username').send_keys('byhy') 2.name driver.find_element_by_na ...

  3. 浏览器console中加入jquery,测试选择元素

    一.chrome浏览器F12打开调试界面,在console中输入(firefox同样可以): var jquery = document.createElement('script'); jquery ...

  4. Selenium高亮显示定位到的元素

    在调试Selenium脚本中,有时因为操作太快或操作不明显而不清楚是否定位到了正确的元素.我们可用通过执行js为定位到的元素添加样式,来高亮显示定位到的元素. 在Selenim Webdriver中, ...

  5. 灵活使用 console 让 js 调试更简单

    摘要: 玩转console. 原文:灵活使用 console 让 js 调试更简单 作者:前端小智 Fundebug经授权转载,版权归原作者所有. Web 开发最常用的就是 console.log , ...

  6. 浏览器调试动态js脚本

    前两天拉取公司前端代码修改,发现在开发者工具的sources选项里边,居然没有列出来我要调试的js脚本,后来观察了一下,脚本是动态在页面里引入的,可能是因为这样所以不显示出来,但是如果不能断点调试,只 ...

  7. chrome 浏览器 console 加入 jquery 测试调试 一介布衣

    chrome 浏览器 console 加入 jquery 测试调试 一介布衣   var jquery = document.createElement('script'); jquery.src = ...

  8. VSCode调试Html中的脚本 vscode前端常用插件推荐,搭建JQuery、Vue等开发环境 vsCode 添加浏览器调试和js调试的方法总结 VS Code - Debugger for Chrome调试js

    一.背景 使用Visual Studio Code写了一个简单的Html页面,想调试下其中script标签里的javascript代码,网上查了一通,基本都是复制粘贴或者大同小异的文章,就是要安装De ...

  9. ADF控件ID变化引发JS无法定位控件的解决方法

    原文地址:ADF控件ID变化引发JS无法定位控件的解决方法作者:Nicholas JSFF定义的控件ID到了客户端时往往会改变.例如在JSFF中的一个的ID为"ot1",但是当这个 ...

随机推荐

  1. JavaScript读写脚txt文件

    1.cmd切换到“C:\Windows\System32>”下,执行“regsvr32 Scrrun.dll” 2.JavaScript读写txt文本代码如下,注意要发布到服务器上 <!D ...

  2. ofbiz进击 第三节。 各个关键文件的说明与作用

    1.  entityengine.xml   数据引擎文件 用于配置数据库链接设置 <group-map group-name="org.ofbiz" datasource- ...

  3. 面向切面编程AOP:基于注解的配置

    Aop编程就是面向编程的羝是切面,而切面是模块化横切关注点. -切面:横切关注点,被模块化的特殊对象. -通知:切面必须要完成的工作 -目标:被通知的对象 -代理:向目标对象应用通知之后创建的对象. ...

  4. Grunt 自动化部署之css、image、javascript、html压缩Gruntfile.js配置

    grunt.initConfig方法 用于模块配置,它接受一个对象作为参数.该对象的成员与使用的同名模块一一对应. 每个目标的具体设置,需要参考该模板的文档.就cssmin来讲,minify目标的参数 ...

  5. oracle ebs 采购订单关闭之PL/SQL实现方法

    应客户需求,需要写个脚本,批量关闭Bonus Item类型的采购订单,在metalink上搜索到一些方法,但是都测试不通.原来需要将代码生成一个并发程序.下面是测试成功的代码. 1.首先创建一个存储过 ...

  6. word - 如何让 图片任意移动

    选中图片, 设置图片的自动换行  为四周环绕型

  7. Java高效编程之三【类和接口】

    本部分包含的一些指导原则,可以帮助哦我们更好滴利用这些语言元素,以便让设计出来的类更加有用.健壮和灵活. 十二.使类和成员的访问能力最小化 三个关键词访问修饰符:private(私有的=类级别的).未 ...

  8. Server2003系统上的内置服务器设置某类IP无法访问问题

    最近测试过程中遇到了一个很奇怪的现象,把服务器(测试产品)部署在Server2003系统的外网A上,把客户端(测试产品)部署在内网B,网络A,B用路由器相连,设置网络A为200.1.1.255,发现客 ...

  9. C语言初学者代码中的常见错误与瑕疵(7)

    问题: 矩形的个数 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形.给出A,B,计算可以从中找到 ...

  10. 如何在图像处理工具包ImagXpress中对图像进行捕捉、复制和粘贴

    如何在在ImagXpress中进行图像的捕捉. 复制和粘贴呢?下面详细来看一下,在多种情况下,图和实现这些操作. 捕捉屏幕图像 捕捉通过ImageXView窗口绑定的屏幕范围,以及保存到一个Image ...