前言
做Web UI自动化,页面元素定位是最基本的要求,也在这做个整理,通过对元素定位的学习对HTML/CSS学习一点基本知识。
说明
(1). xxx为元素名字
(2). 元素获取方式采用的是selenium3 + python
页面元素定位方法如下:
1、 id:WebElement的id属性
<!--html示例--> #百度首页
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
driver.find_element_by_id('xxx')
'''查找id为xxx的元素'''
2、name:WebElement的name属性
<!--html示例--> #百度首页
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off"
driver.find_element_by_name('xxx')
'''找到第一个匹配上的元素;如无,则会报错'''
driver.find_elements_by_name('xxx')
'''返回所有匹配上的元素,添加进一个list中;如无,返回空list'''
3、class:WebElement的class属性
<!--html示例--> #百度首页
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off"
driver.find_element_by_class_name('xxx')
'''找到第一个匹配上的元素;如无,则会报错'''
driver.find_elements_by_class_name('xxx')
'''返回所有匹配上的元素,添加进一个list中;如无,返回空list'''
4、tag:WebElement的tag属性
tag: <iframe src=...></iframe>
iframe就是tag名 尖括号内的都是tag名
driver.find_element_by_tag_name('xxx')
'''找到第一个匹配上的元素;如无,则会报错'''
driver.find_elements_by_tag_name('xxx')
'''返回所有匹配上的元素,添加进一个list中;如无,返回空list'''
5、link_text(全匹配)
<!--html示例--> #百度首页
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
driver.find_elements_by_link_text('新闻')
6、 partial_link_text(部分匹配)
<!--html示例--> #百度首页
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
driver.find_elements_by_link_text('新')
selenium等待元素三种方式
选择元素时
代码设定一个最大等待时长
周期性重新寻找该元素,知道该元素找到返回
或者超出指定的最大等待时长(返回空列表或者抛出异常)
1、隐式等待:
全局的设定
implicitly_wait()
2、显式等待 —— 为一个操作专门制定等待时间
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC #expected_conditions条件判断
from selenium.webdriver.common.by import By
ele = WebDriverWait(driver,60).until(EC.presence_of_element_located(By.ID,'xxx'))
'''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回webelement'''
3、强制等待
import time
time.sleep()
iframe的处理
1、什么是frame和iframe:
www.w3school.com.cn/html/html_frames.asp
2、frame切换
2.1 切换进frame里:
driver.switch_to.frame(id/name)
2.2 切换回主html:
driver.switch_to.default_content()
2.3 多个frame切换:
driver.find_elements_by_tag_name(frame)[index]
css元素选择器 —— 执行效率高
div {color:red;font-size:20}
div : 选择器
{..}:声明 (attribute-values)
选择元素方法 tag/class/ID
1.根据tag名
‘tag’
2.根据ID
‘#ID’
3.根据class
‘.classname’
后代选择器
语法:
s1 s2
选择s1 元素里面 所有s2元素
可以是直接子节点,也可以不是