zl程序教程

您现在的位置是:首页 >  其他

当前栏目

超详细教程Selenium自动化测试第一天(下)

测试教程自动化 详细 selenium 第一天
2023-09-14 09:11:05 时间

万能的XPath

XPath即XML路径语言,支持从xml或html中查找元素节点,使用XPath完全可以替代其他定位放式,如:

  • find_element_by_xpath('//*[@id=""]')等同于find_element_by_id("")
  • find_element_by_xpath('//*[@name=""]')等同于find_element_by_name("")
  • find_element_by_xpath('//*[@class=""]')等同于find_element_by_class_name("")
  • find_element_by_xpath('//标签名')等同于find_element_by_tag_name("标签名")
  • find_element_by_xpath('//a[contains(text(),"")]')等同于find_element_by_link_text("")
  • find_element_by_xpath('//*[@id=""]')等同于find_element_by_partial_link_text("")

需要通过一组元素或分层定位的也可以直接使用XPath直接定位到

从浏览器复制出的XPath有可能不靠谱,所以我们要学会XPath的语法

路径

  • /绝对路径: /html/body/div
  • //相对路径: //div/form //*/form 路径中可以使用 *代表任意标签
  • .当前路径: //div/form/. 等同于//div/form
  • ..上级路径: //div/form/.. 等同于//div

索引

  • 从1开始: /html/body/div[2] //div[1]/form

属性

  • @属性名:定位包含特定属性名的标签, 如//input[@class]
  • @属性名="属性值":定位特定属性名=属性值的标签,如//input[@id="kw"]
  • @*="属性值":定位任意属性名=属性值的标签, 如 //input[@*='kw']
  • 多属性结合定位://input[@id="kw" and @class='kw-class']//input[@id="kw"][@class="kw-class"] (and处也支持使用or,表示或)

函数

  • text():标签中的文本值,如//a[text()="百度首页走起~"]
  • contains(): 包含,如//a[contains(text(), "百度首页")]
  • starts-with(): 以**开头,如//a[starts-with(text(), "百度"]
  • last(): 最后一个, 如//div[last()]

  • parent: 父标签
  • child:子标签
  • following: 后面的,如://*[text()="用户名"]/following::input[1] # 紧邻文本为用户名的输入框
  • preceding:前面的

示例:

from selenium import webdriver

browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
browser.implicitly_wait(10)

div = browser.find_element_by_xpath("/html/body/div/form/div[2]")
print(div.text)

练习:
打开http://115.28.108.130/control.html,点击表格中王五(顺序不固定)后面的查看链接

弹出框处理

allert警告框

alert = driver.switch_to.alert()
alert.accept()  # 确认 或alert.dismiss() 关闭

confirm确认框

confirm = driver.switch_to.alert()
confirm.accept()  # 确认 或alert.dismiss() 取消

propmt提示框

propmt = driver.switch_to.alert()
propmt.send_keys() 输入
propmt.accept()  # 确认 或alert.dismiss() 关闭

练习:
打开网址,分别点击下方的alert, confirm,propmt按钮,并处理对话框

模态框

直接定位即可

练习:
打开百度首页,点击登录,点击用户名密码登录(可直接定位点击)

授权对话框

在打开的url中使用用户名和密码打开,格式如下
http://use:password@www.***.com

框架页面处理

  • iframe: 嵌入在网页body中的单独框架(框架拥有一套独立的html代码)
  • frameset: 框架组,包含多个frame
  • frame:每个frame引用一个独立的网页

因为frame/iframe框架是一套独立的网页,因此frame/iframe中的元素不能直接定位到

  • driver.switch_to.frame(name/id/index/Element)
    • name: frame/iframe的name属性
    • id: frame/iframe的id属性
    • index: 如:0,第一个frame
    • Element: 定位到的frame/iframe,再切换到指定frame
  • driver.switch_to.parent_frame(): 切换到父级frame, 子frame之间不能相互切换
  • driver.switch_to.default_content(): 跳出所有frame

示例:

from selenium import webdriver
from time import sleep

browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://www.w3school.com.cn/tiy/t.asp?f=html_frame_mix")

browser.switch_to.frame("i")  #总的frame
browser.switch_to.frame(0)
print(browser.find_element_by_tag_name("h3").text)
browser.switch_to.parent_frame()
browser.switch_to.frame(1)
print(browser.find_element_by_tag_name("h3").text)
browser.switch_to.parent_frame()
browser.switch_to.frame(2)
print(browser.find_element_by_tag_name("h3").text)
browser.switch_to.default_content()

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!