zoukankan      html  css  js  c++  java
  • Selenium自动化测试第一天(下)

    如有任何学习问题,可以添加作者微信:lockingfree

    目录

    万能的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()
    

    练习:
    打开http://mail.qq.com并使用用户名密码登录qq邮箱

    此为北京龙腾育才 Python高级自动化(Selenium部分)授课笔记
    课程介绍
    想要参加现场(北京)/网络课程的可以联系作者微信:lockingfree

    1. 高效学习,快速掌握Python自动化所有领域技能
    2. 同步快速解决各种问题
    3. 配套实战项目练习
  • 相关阅读:
    P1271 【深基9.例1】选举学生会(基数排序)
    P7076 [CSP-S2020] 动物园
    #10127. 「一本通 4.3 练习 1」最大数
    P2671 [NOIP2015 普及组] 求和
    P3369 【模板】普通平衡树
    P2503 [HAOI2006]均分数据
    P2846 [USACO08NOV]Light Switching G(动态开点写法)
    P6278 [USACO20OPEN]Haircut G
    P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G
    P1012 [NOIP1998 提高组] 拼数
  • 原文地址:https://www.cnblogs.com/superhin/p/10314634.html
Copyright © 2011-2022 走看看