本文主要是记录一些在做自动化过程中,无法定位的一些元素,因为对HTML理解不深,所以遇到的坑需要一一化解,后续遇到的会陆续记录。
一、a标签的href属性值等于javascript:void(0)
1.首先解释下javascript:void(0),javascript是网页的脚本语言之一,而void是javascript的操作符,意思就是只执行表达式,但是没有返回值(在C、java等语言中void也是没返回值),更直白的就是点了跟没点是一样的。举例说明一下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>测试a标签</title>
</head>
<body>
<div>
<a href="javascript:void(0)" id="abc">测试</a>
</div>
</body>
</html>
以上代码,用浏览器打开,点击“测试”链接,可以看到页面中不会有任何反应,所以在定位遇到javascript:void(0)时,千万要注意实际操作一下,不要一昧的写代码,却发现一直实现不了操作。当然并不仅仅是javascript:void(0),还有其他:
(1)<a href="javascript:;" id="abc">测试</a> 与javascript:void(0)效果一致
(2)<a href="####" id="abc">测试</a> 几个#无所谓
但是:
为什么说但是呢?因为你在实际操作中,发现a标签使用了javascript:void(0),也会跳转url啊,这是为什么?因为强大的JS脚本,下面来个简单示例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>测试a标签</title>
</head>
<body>
<div>
<a href="javascript:void(0);" id="abc">测试</a>
</div>
<script src="jquery.min.js"></script>
<script type="text/javascript">
$("#abc").click(function(){
window.open("http://www.baidu.com","_self")
})
</script>
</body>
</html>
以上示例,主要是a标签使用了javascript:void(0),但是还可以用js来控制点击事件,为什么这么麻烦呢?直接把url写在href属性里就搞定啦,这是因为多种情况下的请求,url会变,所有用js可以拿到不同的url去请求。再次解释一下,虽然这个很简单还要这么啰嗦,主要是为了说明为什么,从根本理解。
二、style=display:none
同样的解释一下:
display:none ---不为被隐藏的对象保留其物理空间,即该对象在页面上彻底消失,通俗来说就是看不见也摸不到。注意,是说页面上彻底消失,不代表HTML中消失啊,在使用定位的时候,隐藏的元素也是可以找到的,但对元素操作就会抛出异常。
SO,在Selenium定位的时候可要注意了,不要看到元素就定位,运行一直报错,然后检查定位没错啊,结果搞得烦死。
举例: