百度“搜索设置”之关于在页面定位某元素,而其中又参杂动态页面存在的问题解决方法
2017-03-15 18:52
651 查看
遇到定位不到元素的问题,应先确定:
1.定位元素的方法写的对不对(应先查找html中是否含有相同的元素及值得存在,以便写出正确的定位方法)
2.页面中是否存在frame与iframe(应使用driver.switch_to_frame(frame的id)跳转到争取的iframe)
3.验证页面是否存在动态元素及页面,导致元素定位不到
示例:定位百度首页的"搜索设置"
代码:
解释:
疑问1:他们不再同一个div,而且他们的关系差不多是同级.为什么要先click设置,在click搜索设置?
因为搜索设置是动态的,不 click 那几行 html 还没生成
疑问2:看起来像是一个下拉框选取,为什么不采取那种定位元素的方法?
我之前也采取过这种定位方式,后来可想而知,报一大推的错误。
遇到此类问题,先去查看页面的源代码。在百度首页的源码中我们可以得知,“设置”与“搜索设置”不在同一个div下,且设置那行代码还有一个超链接。该连接就是"搜索设置"的页面。所以这种情况,我们只能通过二次定位方法来解决此问题
先来查看下拉框的源代码实例:
注意下拉框他是在同一个select里面,此时我们可以采取下拉框的定位方式,如下:
疑问3:print abc.get_attribute("outerHTML")是干嘛的?
找不到正确的定位元素方法就把它打出来看看当时的内容就知道了。
1.定位元素的方法写的对不对(应先查找html中是否含有相同的元素及值得存在,以便写出正确的定位方法)
2.页面中是否存在frame与iframe(应使用driver.switch_to_frame(frame的id)跳转到争取的iframe)
3.验证页面是否存在动态元素及页面,导致元素定位不到
示例:定位百度首页的"搜索设置"
代码:
# coding=utf-8 from selenium import webdriver dr = webdriver.Firefox() dr.get('http://www.baidu.com') abc = dr.find_element_by_link_text(u'设置') abc.click() ddd = dr.find_element_by_link_text('搜索设置') ddd.click() # print abc.get_attribute("outerHTML")
解释:
疑问1:他们不再同一个div,而且他们的关系差不多是同级.为什么要先click设置,在click搜索设置?
因为搜索设置是动态的,不 click 那几行 html 还没生成
疑问2:看起来像是一个下拉框选取,为什么不采取那种定位元素的方法?
我之前也采取过这种定位方式,后来可想而知,报一大推的错误。
遇到此类问题,先去查看页面的源代码。在百度首页的源码中我们可以得知,“设置”与“搜索设置”不在同一个div下,且设置那行代码还有一个超链接。该连接就是"搜索设置"的页面。所以这种情况,我们只能通过二次定位方法来解决此问题
先来查看下拉框的源代码实例:
<html> <body> <select id="ShippingMethod" onchange="updateShipping(options[selectedIndex]);" name="ShippingMethod"> <option value="12.51">UPS Next Day Air ==> $12.51</option> <option value="11.61">UPS Next Day Air Saver ==> $11.61</option> <option value="10.69">UPS 3 Day Select ==> $10.69</option> <option value="9.03">UPS 2nd Day Air ==> $9.03</option> <option value="8.34">UPS Ground ==> $8.34</option> <option value="9.25">USPS Priority Mail Insured ==> $9.25</option> <option value="7.45">USPS Priority Mail ==> $7.45</option> <option value="3.20" selected="">USPS First Class ==> $3.20</option> </select> </body> </html>
注意下拉框他是在同一个select里面,此时我们可以采取下拉框的定位方式,如下:
疑问3:print abc.get_attribute("outerHTML")是干嘛的?
找不到正确的定位元素方法就把它打出来看看当时的内容就知道了。
相关文章推荐
- 关于iOS页面中scrollview中嵌入百度地图滑动冲突问题解决方法
- 当子级元素浮动时让父级元素高度自适应的三种方法(以及多个子集元素同时存在浮动和绝对定位时的问题的解决办法)
- 关于appium操作真机打开app之后无法定位页面元素的问题的解决办法
- 关于获取页面元素的二进制数据并再次上传的问题的解决
- jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
- 关于VS2008 中添加成员变量提示 此网站的某个加载项运行失败 请检查“Internet选项”中的安全设置是否存在潜在冲突 问题解决办法
- 关于web页面缓存问题解决方法,如图片缓存,异步提交数据页面不更新
- 关于动态创建dsn时不能设置用户名和密码的解决方法
- 关于arcgis用GP服务模型 生成等直面没有跟地图一致,颜色区设置及数据接收问题的解决方法!
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- DIV设置float后父容器无法定位高度的问题解决方法
- 关于netbeans字体设置问题的终极解决方法
- asp.net刷新页面定位问题的解决方法
- 关于提示”XML 文档只能有一个顶层元素“问题的解决方法备忘
- 关于百度富文本编辑器ueditor的.NET版本地图片上传提示uploader类同时存在于两个dll中的解决方法
- android将搜索引擎设置为中国雅虎无法搜索问题解决方法
- 关于WinForm框架中点击按钮时存在的多次提交问题的解决方法
- 关于数据动态绑定问题的解决方法
- 在进行页面的DIV CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法也是“见机行事”。
- 关于html中charset与<title>位置不同页面空白的问题及解决方法