一. 实例

如何定位到下图第二个"抢投标",有一种方法是利用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自动化:元素定位(二)的更多相关文章

  1. robot framework 笔记(二),web ui 元素定位

    背景: 元素定位的方式很多,有通过 id.name.class等等,有感兴趣的同学可以参看相关文档,本文介绍 跟过文字定位的方法,在工作中一直使用这一种 no bb 方法如下: 1.根据"我 ...

  2. web页面元素定位

    所有web网页中有8种元素定位方式 靠单一的特征找元素:6种(id,class_name,tag_name,name,link_text(2))组合各种特征和关系来找元素:2种(xpath,css) ...

  3. Appium + Python自动化 - 元素定位uiautomatorviewer

    元素定位主要介绍如何使用uiautiomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作.uiautiomatorviewer是android-sdk自带的一个元素定位工具,非常 ...

  4. Appium+python自动化-元素定位uiautomatorviewer的使用

    前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...

  5. selenium+python自动化元素定位

    最近学习自动化测试,终于初步学习完成,需要进行博客日志总结,加深巩固自己的知识. 元素的八种定位方式 1.id 以百度为例子 我们在python输入的元素定位语法:bs.find_element_by ...

  6. APPIUM-Android自动化元素定位方式

    一.常用元素定位方法 appium从selenium中继承了所有的元素定位方法, 并且增加了一些自己的元素定位方式,下方截图分别为selenium和MobileBy包源码: 但是从继承selenium ...

  7. selenium+python自动化-元素定位

    自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告. 本篇主要讲几种基本的元素定位方法元素定位在这四个环节中是至关重要的,如果说按学习精力 ...

  8. web自动化之定位

    UI自动化必不可少的操作--元素定位 8大基础定位 driver.find_element_by_id() # id定位 driver.find_element_by_name() # name定位 ...

  9. python-web自动化-元素定位

    # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By # ...

随机推荐

  1. Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

    android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WA ...

  2. OpenCV3计算机视觉+python(二)

    不同色彩空间的转换 当前,在计算机视觉中有三种常用的色彩空间:灰度.BGR以及HSV 1.灰度色彩空间是通过去除彩色信息来将其转换为灰阶,灰度色彩空间对中间处理特别有效,比如人脸检测 2.BGR,即蓝 ...

  3. ABAP 创建测试文件

    使用 CG3Y 下载,可以改成下载txt到本地. FORM CREATE_TESTFILE. ), L_OFF LIKE SY-TABIX, L_LEN LIKE SY-TABIX, L_SUM LI ...

  4. 鸟哥的Linux私房菜-第一部分-第3章主机规划与磁盘分区

    1. 选择一个与你的Linux搭配的主机配置 NAT服务器:小型企业或者学校都基本是只有一条对外的线路,网卡 SAMBA服务器:完成Windows网上邻居的功能,网卡和硬盘要求高 Mail服务器:如果 ...

  5. python基础27 -----python进程终结篇-----IO模型

    一.IO模型 1.IO模型分类 1.阻塞IO--------blocking IO 2.非阻塞IO------nonblocking IO 3. 多路复用IO------- multiplexing ...

  6. python之网络socket编程

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  7. [笔记]如何将传统的回调函数转换为C#5.0支持的await格式

    C#5.0引入了编译器支持的 async 和 await 关键字,这就为开发者提供了使用同步思想写异步代码的方便. 但是有些传统函数仅提供了异步回调实现,如何对其封装,使其可以享受await的便利呢? ...

  8. iOS 9 的新功能 universal links

    什么是 universal links: (通用链接) 一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开web page和 APP的方式. 第一点,链接打开网址 顾名思义 第 ...

  9. Qt5.3.0的安装与测试

    Qt5.3.0的安装与测试(交叉编译,用于arm,支持tslib触摸屏) 本次移植可以使用触摸屏. 首先下载源码包: http://download.qt.io/official_releases/q ...

  10. 使用awk来提取内容

    1.提取gff文件中的HLA基因的相关bed文件. gff的格式: zcat *gz|gawk 'BGIN{FS="\t";OFS="\t"}$3==" ...