前文已经说了基本的定位元素的方式和模拟键鼠点击页面元素,本篇将给大家讲讲自动化测试的进阶技巧 关键字find_elements和iframe
因为这次文章属纯文本笔记分享,需要这次知识的视频教程的小伙伴可以点击并输入暗号:CSDN
书接上文:【Selenium】Selenium自动化入门之操作元素与句柄
appium篇:【appium】appium自动化入门之环境搭建(上)
前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象。
webdriver 提供了定位一组元素的方法,跟前面八种定位方式其实一样,只是前面是单数,
返里是复数形式:find_elements
本篇拿百度搜索作为案例,从搜索结果中随机选择一条搜索结果,然后点击查看。
1.在百度搜索框输入关键字“软件测试”后,用 firebug 查看页面元素,可以看到这些搜索结果有共同的属性。
2.从搜索的结果可以看到,他们的父元素一样:< h3 class=“t” >
3.标签都一样,且 target 属性也一样: 4.于是这里可以用 css 定位(当然用 xpath 也是可以的)
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.finf_element_by_id("kw").send_keys(u"软件测试")
driver.finf_element_by_id("kw").submit()
s = driver.find_elements_by_css_selector("h3.t>3")
1.前面的定位策略叧是一种猜想,并不一定真正获取到自己想要的对象的,也许会定位到一些不想要的对象。
2.于是可以获取对象的属性,来验证下是不是定位准确了。返里可以获取 href 属性,打印出 url 地址
1.搜索结果有 10 条,从返 10 条中随机取一个就 ok 了
2.先导入随机函数:import random
3.设置随机值范围为 0~ 9:a=random.randint(0~9)
1.从返回结果中随机取一个 url 地址
2.通过 get 方法打开 url
3.其实这种方式是接口测试了,不属亍 UI 自劢化,这里只是开阔下思维,不建议用这种(接口测试的教程后续会出)
方法
# coding:utf-8
from selenium import webdriver
import random
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.finf_element_by_id("kw").send_keys(u"软件测试")
driver.finf_element_by_id("kw").submit()
s = driver.find_elements_by_css_selector("h3.t>3")
# 设置随机值
t = random.randint(0,9)
# 随机取一个结果获取url地址
a = s[t].gei_attribute("href")
print a
driver.get(a)
1.前面那种方法,是直接访问 url 地址,算是接口测试的范畴了,真正模拟用户点击行为,得用 click 的方法
# coding:utf-8
from selenium import webdriver
import random
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.implicitly_wait(10)
driver.find_element_by_id("kw").send_keys(u"软件测试")
driver.find_element_by_id("kw").submit()
s = driver.find_elements_by_css_selector("h3.t>a")
# 设置随机值
t = random.randint(0, 9)
# 随机取一个结果点击鼠标
s[t].click()
不知道有小伙伴有没注意一个细节,前面在搜索框输入关键字后,我并没有去点击搜索按钮,而是用的 submit 的方法,submit 相当于回车键。
Frame 不 Iframe 两者可以实现的功能基本相同,不过 Iframe 比Frame 具有更多的灵活性。
frame 是整个页面的框架,iframe 是内嵌的网页元素,也可以说是内嵌的框架
Iframe 标记又叫浮动帧标记,可以用它将一个 HTML 文档嵌入在一个 HTML 中显示。
它和 Frame 标记的最大区别是在网页中嵌入 的< Iframe>< /Iframe>所包含的内容不整个页面是一个整体,而< Frame>< /Frame>所包含的内容是一个独立的个体,是可以独立显示的。
另外,应用 Iframe 还可以在同一个页面中多次显示同一内容,而不必重复这段内 容的代码。
1.打开 http://mail.163.com/登录页面
2.用 firebug 定位登录框
3.鼠标停留在左下角(定位到 iframe 位置)时,右上角整个登录框显示灰色,说明 iframe 区域是整个登录框区域
4.左下角箭头位置显示 iframe 属性
1.由于登录按钮是在 iframe 上,所以第一步需要把定位器切换到iframe 上
2.用 switch_to_frame 方法切换,此处有 id 属性,可以直接用 id定位切换
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://http://mail.163.com")
driver.implicitly_wait(30)
# 切换iframe
driver.switch_to_frame("x-URS-iframe")
driver.find_element_by_name("email").send_keys("123")
driver.find_element_by_name("password").send_keys("456")
1.返里 iframe 的切换是默认支持 id 和 name 的方法的,当然实际情况中会遇到没有 id 属性和 name 属性为空的情况,这时候就需要先定位 iframe
2.定位元素还是之前的八种方法同样适用,这里我可以通过 tag 先定位到,也能达到同样效果
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://http://mail.163.com")
driver.implicitly_wait(30)
iframe = driver.find.element_by_tag_name("iframe")
driver.switch_to_frame(iframe)
driver.find_element_by_name("email").send_keys("123")
driver.find_element_by_name("password").send_keys("456")
1.当 iframe 上的操作完后,想重新回到主页面上操作元素,这时候,就可以用 switch_to_default_content()方法返回到主页面
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://http://mail.163.com")
driver.implicitly_wait(30)
driver.find_element_by_name("email").send_keys("123")
driver.find_element_by_name("password").send_keys("456")
# 释放iframe,重新回到主页面上
driver.switch_to.default_content()
1.定位到元素后,切换到 firepath 界面
2.看 firebug 工具左上角,如果显示 Top Window 说明没有 iframe
3.如果显示 iframe#xxx 返样的,说明在 iframe 上,#后面就是它的 id
1.先找到官方的文档介绍
2.python 的脚本上面划一横线,是说这个语法已经过时了(也可以继续用,只是有部份人有强迫症)。
上面文档介绍说官方已经不推荐上面的写法了,用这个写法就好了 driver.switch_to.frame()
# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://mail.163.com/")
driver.implicitly_wait(30)
# 凿换 iframe
# iframe = driver.find_element_by_tag_name("iframe")
# driver.switch_to_frame(iframe)
# driver.switch_to_frame("x-URS-iframe")
driver.switch_to.frame("x-URS-iframe")
driver.find_element_by_name("email").send_keys("123")
driver.find_element_by_name("password").send_keys("456")
# 释放 iframe,重新回刡主页面上
driver.switch_to.default_content()
我相信能在CSDN上来看这些技术类文章的,一定是有个想学习的心,奈何学习的道路遥远且冗杂,都想走前人的路,少碰点荆棘
方便大家学习我整理的一个提供大家参考的学习脑图,需要这份脑图的可以直接领取或者点击并输入暗号:CSDN也行
当然千万不要忘记领取这份selenium自动化测试教学的视频配套版,毕竟是辛苦录制的