html常见元素
---- form标签:用于页面向后端提交数据,需要提交数据的标签就放在form标签里面,这个标签带一个action属性,把数据需要提交的地址放在里面
---- <input type="text"> 文本输入框
---- <input type="radio"> 单选框
---- <input type="checkbox"> 复选框
---- <input type="file"> 长传文件
---- <input type="submit"> 提交按钮
---- <input type="button" value="点我啊"> 按钮
----- <img src="图片路径" width="270" height="170"> 图片
----- <a href="点击后要跳转的链接地址">链接文本内容</a> 链接
----- <table> 表格
<th>表头</th>
<tr>行</tr>
<td>列</td>
</table>
---- <ul> 列表
<li>这是列表 1 </li>
<li>这是列表 2 </li>
</ul>
---- 下拉选项
<select name="这是name" id="">
<option value="1">选项1</option>
<option value="2">选项2</option>
</select>
----- <iframe src="内嵌页面的地址" frameborder="0"></iframe> 页面嵌套页面
----- <textarea name="" id="" cols="30" rows="10"></textarea> 多文本域输入框
----- 弹窗:JavaScript的三种弹框方式,他不是html实现的,因此不能用html页面元素去定位获取,用Alert类处理
1)alert 只有一个确定按钮,不需要元素定位,优先级最高
2)confirm 取消和确定按钮
3)prompt 有一个输入框,输入内容后点击确定或取消按钮弹框消失
元素定位
八大定位方式:
一、 根据元素的某个属性查找(6种): id name class_name tag_name 只针对a元素(链接):link_text 和 portial_link_text
二、 多个属性组合查找元素:
1 css_selector
2 xpath(项目中用得最多)
1)绝对路径:页面上的上级下级元素容易改变,因此用绝对路径没有相对路径灵活
2)相对路径
原则:---- 先找我们想定位的元素,取元素和属性,如果现在不能唯一过滤,则再在该元素的上级去查找元素,用多重位置定位元素
---- 相对定位--靠自己的特征来定位,不在乎第几代,不在乎是哪个小弟 以 // 开头
---- 在取上级元素时,优先使用id等特征比较明显的属性,不一定非要父级元素
A 属性匹配 //标签名【@属性=值】 例 //i[@class="ing"]
B 文本值匹配 //标签名【text()=值】 例 //a[text()="公告"]
c 包含 //标签名[contains(@属性/text(),值)] 例 //a[contains(@href,"/Notify/index/courseid/")] //a[contains(text(),"公告")]
D 逻辑运算 (and or) 组合更多的元素特征 //标签名【@属性=值 and @属性=值 and contains(@属性/text(),值】) and text()=值
例 //a[text()="公告" and contains(@href,"/Notify/index/courseid/")]
E //一级元素//二级元素//。。。层级定位 //div[@id="number-attend"]//i[@class="ing"]
F 轴定位:分析关系找元素,主要运用在页面显示为一个表格样式的数据列,需要通过组合来定位元素
常用参数:ancestor 祖先节点 包括父亲
parent 父节点
preceding-sibling 当前元素节点标签之前的所有兄弟节点
following-sibling 当前元素节点标签之后的所有兄弟节点
preceding 当前元素节点标签之前的所有节点
following 当前元素节点标签之后的所有节点
使用语法: 已知元素/轴::标签名【@属性=值】
例 //div//table//td//preceding::td
例 //dd[@data-val="公告"]/following-sibling::dd[contains(@class,"batscore")]/span
G 下标/js: 很少用,一般用上面的方法能够解决大部分的定位问题
三大等待
—— 强制等待 time.sleep(2)
—— 隐性等待 driver.implicitly_wait(5)
1) 每一个会话当中,只需要被调用一次,因此一般要用隐性等待时,都是写在初始化driver后面
2) 一个元素被找到-元素存在或者一条命令执行完成
3) 在实际工作中,这种方式不常用
—— 显性等待 WebDriverWait(浏览器对象,等待的时间).until/not unitil...条件模块
1)显性等待适合很多场景,比如某个元素可见,等待新的窗口出现,等待url变更为xxx。。。
2) 等待:等待上线--值,轮询周期--多久去确认一下条件是否成立。WebDriverWait类默认的是0.5秒, 条件模块:Expected_condition
3)引入 from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
#找到定位得元素 loc=("xpath",‘//a[text()=" - SeleniumHQ Browser Autionmation"])
# 等待10秒,每0.5秒轮询一次,直到元素存在 WebDriverWait(driver,10,0.5).until(EC.visibility_of_element_located(loc))
#找到元素并执行操作 driver.find_element(*loc).click()
三大切换(三大切换,建议都要加上time.sleep(1)---稳定性)
切换窗口: 当页面的操作,打开了一个新的窗口,需要在新的窗口当中,去进行下一步操作时
原理:所有的窗口存储在一个列表中,根据窗口出现的先后先后顺序,追加到列表中
wins= driver.window_handles 得到所有已打开的窗口
使用:driver.swith_to_windows(win【-1】)切换窗口到最新打开的窗口
切换iframe: iframe页面内嵌页面,当你要操作的元素在iframe中,需要切换到内嵌页面中
怎么看元素在iframe当中:用F12 + ctrl F 看要操作的元素路径是否含iframe
使用: iframe是标签对,是当前默认HTML中的一个元素
driver.switch_to_frame(参数)
参数的三种方式:iframe下标 driver.switch_to.frame(3)
iframe元素的name属性 driver.switch_to.frame("login_frame_qq")
iframe这个webelement元素
driver.switch_to.frame(driver.find_element_by_xpath(" //iframe [@name="login_frame_qq"]"))
切换alert:三大切换:窗口、iframe、alert(alter、prompt、confirm统称为alert弹框)
使用:找到要切换得元素,点击出发弹框 driver.find_element_by_id(‘press_button‘).click()
等待弹框出现 time.sleep(1)
切换到弹框 alert = driver.switch_to_alert()
接受弹框操作,以及其他需要处理得操作 alert.accept()
原文:https://www.cnblogs.com/jiandanzhou/p/12455693.html