Selenium-webdriver 之元素定位方法归类

  要实现UI 自动化,Selenium 是一个必不可少的测试工具!通过selenium的webdriver,几乎可以实现所有的UI自动化!目前定位元素的方法有很多,具体的要用那几张方法选择这个不但要考虑到个人的习惯,更多的还是要看响应的时间以及定位的准确性和稳定性!

一,定位元素的方法:

1)id

2) name

3) class name

4) tag name

5) link test 

6) partial link text

7) xpath

8) css selector 

二,定位方法选择:

如果看到链接类的a标签,可以直接使用 find_element_by_link_text 定位

大部分人做自动化为了方便直接用xpath,但是这个不适用于经常UI改版的模块!因为一些元素的位置可能会有更改,如果使用其他属性去定位,即便是位置更改了属性还是原来的属性,这样方便后期的维护!另外使用xpath方法定位,也是通过程序转换成css selector 方法,不如直接使用css selector 定位快捷!如果一个元素有多个类,优先推荐使用CSS方法定位,如:

div.类名1.类名2  另外还有些元素id是不固定的,所以定位前先确认在写代码!

三,以下是几种方法定位元素的实现方式对比:

    直接定位                                                  xpath方法定位                               css selector 方法定位

1️⃣ find_element_by_id("id值")             2️⃣    //*[@id="id值"]                 3️⃣    ----[#值]
1️⃣find_element_by_name("name值") 2️⃣ //*[@name="name值"] 3️⃣ -----[name=值]
1️⃣find_element_by_class_name("某一个class name") 2️⃣//*[contains(@class, "某一个class name")] 3️⃣[.值]

1️⃣find_element_by_tag("标签名") 2️⃣ //标签名 3️⃣ 直接写标签
1️⃣find_element_by_link_text("链接文字") 2️⃣ //a[text()="链接文字"] 3️⃣ 不支持
1️⃣find_element_by_partial_text("部分链接文字") 2️⃣ // a[contains(text(), "部分链接文字")] 3️⃣不支持


四,几种比较特殊的元素定位方法
1)下拉菜单元素的定位 需要导入包 from selenium.webdriver.support.select import Select 备注:Select 只对<select>标签的下拉菜单有效,具体格式为:
Select(driver.find_element_by_id('id值')).select_by_index() 按照索引去定位元素
Select(driver.find_element_by_id('id值')).select_by_value()  按照value值去定位元素
Select(driver.find_element_by_id('id值')).select_by_visible_text()  按照选项文字去定位元素  参数为option对应的text值

2)滑动模块拖动的元素定位操作 需要引入ActionChains 类 from selenium.webdriver.common.action_chains importActionChains

首先定位原始的元素位置   a1 = driver.find_element_by_id('xx')
定位拖动后元素的位置     a2 =driver.find_element_by_css_selector('[name=xx]')
拖动操作的语句       ActionChains(driver).drag_and_drop(a1,a2).perform()

3)鼠标滑过 ActionChains(driver).move_to_element(driver.find_element_by_link('')).perform() 其他鼠标类的操作比较简单,如有疑问请自行百度!
4)键盘操作 使用前需要导入keys类包 from selenium.webdriver.common.keys import Keys
具体的使用方法为 : driver.find_element_by_id('').send_keys(*)
* 号可以替换为:
Keys.BACK_SPACE 删除功能 Keys.SPACE 空格 Keys.TAB Tab键 Keys.ESCAPE 回退建 Keys.ENTER 回车键
Keys.CONTROL,'c' 复制 Keys.CONTROL,'x' 剪切 Keys.CONTROL,'v' 粘贴  Keys.CONTROL,'a' 全选
5)js 方法 :有些元素是操作不到的,比如只读元素,隐藏的元素等,为了操作这些元素需要用JS 进行操作,具体操作步骤如下(以日期的选择框为例,好多的日期选择只能点击不能输入,改成输入的):
#首先是将所需要更改的元素用js定义一下,删除只读属性,有的是隐藏属性
js = '''
document.querySelector('[name=act_start_time]').removeAttribute("readonly");
document.querySelector('[name='act_stop_time]').removeAttribute("readonly");

'''
driver.execute_script(js)

ls = driver.find_element_by_css_selector('[name=act_start_time]')

ls.send_keys('2019-09-03 17:30')

ll = driver.find_element_by_css_selector('[name=act_stop_time]')

ll.send_keys('2019-09-09 17:30')

  

比小白还不如,简称少白!本人致力于发表从小白角度去阅读的文章,让大家能通过行业内的“土话”让各位学习到知识!本人也是刚写文章不足,许下宏愿希望能够做到!望大家多多支持指正!不胜感激!强调一点,本人不是大牛,不要喷我!希望多提宝贵意见!
原文地址:https://www.cnblogs.com/shaobai/p/11493610.html