web自动化:元素定位(二)
一. 实例
如何定位到下图第二个"抢投标",有一种方法是利用xpath定位 //a[@href="/loan/loan_detail/Id/7190.html" and text()="抢投标"],但是我们注意到,这个链接中的7190是id值,而页面中的id值是可以变化的,因此当标变化时,我们又得重新写xpath定位表示式了,那么,有没有一种更好的方式来解决这个问题,这就需要用到xpath的轴定位
二. xpath的轴定位
1. 轴运算
轴名称 | 描述 |
ancestor | 选取祖先节点(包括父节点) |
parent | 选取父节点 |
preceding | 选取当前节点标签之前的所有节点(按html页面先后顺序) |
preceding-sibling | 选取当前节点标签之前的所有兄弟节点 |
following | 选取当前节点标签之后的所有节点(按html页面先后顺序) |
following-sibling | 选取当前节点标签之后的所有兄弟节点 |
2. 使用语法:轴名称::节点名称
例如: //div//table//td//preceding::td
3. 应用场景:页面显示为一个表格样式的数据列,需要通过组合来定位元素
4. 实例1:利用xpath轴定位,定位到下图第二个"抢投标"
实例2:定位到下图"企业3"中的"375万"
注意:我们不能通过//div[text()="企业3"]/following-sibling::div//span[text()="375万"]来定位,因为金额是可变的,如果这个标金额变化了,这个表达式就匹配不到了。所以定位时,一定要考虑到哪些是变化的,比如文本内容,元素下标(同一个span[n]),变化的一定不能作为定位表达式中的一部分,一般利用元素的固定的属性值来定位
三. 滚动条之后的元素定位
方法一:
使用js脚本拖动到指定的地方
第一步:找到这个元素
target = driver.find_element_by_id("id_keypair")
第二步:利用js
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动元素到可见元素去
实例:比如现在想定位下图中的id="local_current"所在的元素,但是这个元素所代表的区域不是页面的可见区域,我们需要执行js来拖动滚动条
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("http://news.baidu.com/") driver.maximize_window() sleep(2) target = driver.find_element_by_id("local_current") driver.execute_script("arguments[0].scrollIntoView();", target)
方法二:根据页面显示进行变通,发送tab键
例如:百度搜索结果—定位到滚动条滚动之后的某个链接。
发送tab键切换到密码框
from selenium.webdriver.common.keys import Keys driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)
拓展:
滚动到顶部:
js = "varq=document.documentElement.scrollTop=0" driver.execute_script(js)
或者
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0)")
滚动到底部:
js = "varq=document.documentElement.scrollTop=10000" driver.execute_script(js)
或者
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
实例:拖动百度新闻页面的滚动条到底部和顶部
from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get("http://news.baidu.com/") driver.maximize_window() sleep(2) #先将滚动条滚动到底部 js_1 = "varq=document.documentElement.scrollTop=10000" driver.execute_script(js_1) sleep(2) #再将滚动条滚动到顶部 js_2 = "varq=document.documentElement.scrollTop=0" driver.execute_script(js_2)
web自动化:元素定位(二)的更多相关文章
- robot framework 笔记(二),web ui 元素定位
背景: 元素定位的方式很多,有通过 id.name.class等等,有感兴趣的同学可以参看相关文档,本文介绍 跟过文字定位的方法,在工作中一直使用这一种 no bb 方法如下: 1.根据"我 ...
- web页面元素定位
所有web网页中有8种元素定位方式 靠单一的特征找元素:6种(id,class_name,tag_name,name,link_text(2))组合各种特征和关系来找元素:2种(xpath,css) ...
- Appium + Python自动化 - 元素定位uiautomatorviewer
元素定位主要介绍如何使用uiautiomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作.uiautiomatorviewer是android-sdk自带的一个元素定位工具,非常 ...
- Appium+python自动化-元素定位uiautomatorviewer的使用
前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...
- selenium+python自动化元素定位
最近学习自动化测试,终于初步学习完成,需要进行博客日志总结,加深巩固自己的知识. 元素的八种定位方式 1.id 以百度为例子 我们在python输入的元素定位语法:bs.find_element_by ...
- APPIUM-Android自动化元素定位方式
一.常用元素定位方法 appium从selenium中继承了所有的元素定位方法, 并且增加了一些自己的元素定位方式,下方截图分别为selenium和MobileBy包源码: 但是从继承selenium ...
- selenium+python自动化-元素定位
自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 本篇主要讲几种基本的元素定位方法元素定位在这四个环节中是至关重要的,如果说按学习精力 ...
- web自动化之定位
UI自动化必不可少的操作--元素定位 8大基础定位 driver.find_element_by_id() # id定位 driver.find_element_by_name() # name定位 ...
- python-web自动化-元素定位
# -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By # ...
随机推荐
- Navicat for MySQL远程连接虚拟机
在虚拟机中进入mysql mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT O ...
- MySQL 第五天
回顾 连接查询: 多张表连接到一起, 不管记录数如何,字段数一定会增加. 分类: 内连接,外连接,自然连接和交叉连接 交叉连接: cross join(笛卡尔积) 内连接: inner join, 左 ...
- 图像分割之mean shift
阅读目的:理解quick shift,同时理解mean shift原理,mean shift用于图像聚类,优点是不需要指定聚类中心个数,缺点是计算量太大(原因). mean shift主要用来寻找符合 ...
- Linux下安装Java环境配置
1.下载安装文件 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 2. ...
- springboot整合 Thymeleaf模板
首先引入maven jar依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...
- 升级到tomcat8遇到The method getDispatcherType() is undefined for the type HttpServletRequest
今天升级到tomcat8,发现原来的项目不能运行了,遇到下面的错误:The method getDispatcherType() is undefined for the type HttpServl ...
- Python操作——Memcached
Memcached是一个高性能的分布式内存对象缓存系统,用于Web应用以减轻数据库的负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度. Memcached ...
- python中的逻辑操作符
python中主要有三个逻辑操作符,分别是:and.or.not. and:且,所有人为真才为真. or:或,一个为正就是真. not:非,取反. >>> print(3>2 ...
- Ubuntu输入su命令提示认证失败的解决办法
Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许执行"su命令到root".对于桌面用户而言,这样可以提高安全性.但对于服务器可以设置成允许"su命 ...
- Redis慢查询,redis-cli,redis-benchmark,info
一.慢查询: 1.慢查询的作用:通过慢查询分析,找到有问题的命令进行优化. 2.慢查询的redis的配置参数: slowlog-log-slower-than 慢查询预设阈值(单位是微秒1秒=1000 ...