要实现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')