• day15 Ui自动化元素的定位


    day15 元素的定位
    
     Ui自动化元素的定位
     1、火狐浏览器安装try xpath
    
     2、元素定位思路:
       (1)查看页面元素,确认能够唯一定位到元素的属性,比如id,文案
    
     3、学习xpath cssSelector 手写定位方式
         xpath(xpath 定位尽量已属性定位为主,层级为辅)
             //*  获取当前页面的全部
             //*[@id='i1'] 可以通过id属性进行定位,@代表引用属性
             //select[4]如果不存在唯一取值,可以使用角标取值
             //div[@class='driver'][1]/div[@class='inner'][1]/input  相对路径层级定位
             //select[@size='4'and @multiple='multiple'] 多属性确立唯一
    
         cssSelector 多使用这种方法
             # 代表id
             #i1
             .inner代表class
             [placeholder="请通过ID定位元素"] 通过属性定位
             input[placeholder="请通过ID定位元素"]
    
             select[size='4'][multiple="multiple"]  多属性确立唯一
         问题一:
                 什么时候用css selector 什么时候用xpath
                 由于css selector 没有角标定位方式,如果定位的元素无法根据属性确立唯一
                 只能通过xpath进行角标定位

    4、18种定位方式

    from selenium import webdriver
    
    
    driver=webdriver.Chrome();
    
    driver.get("http://ui.imdsx.cn/uitester/")
    
    #滚动条到最上面
    js="window.scrollTo(0,0)"
    driver.execute_script(js)
    
    """
    8种单数定位方式
    """
    
    #id进行定位
    #
    # driver.find_element_by_id("i1").send_keys("11")
    #
    # #name定位方式
    #
    # driver.find_element_by_name("name").send_keys("22")
    #
    # #文案定位a中的文案
    #
    # driver.find_element_by_link_text("新建标签页面").click()
    #
    # #1、标签名定位,如果有很多个相同的标签,获取第一个标签
    # #2、最不常用
    #
    # driver.find_element_by_tag_name('input').send_keys('1111')
    
    #使用xpath
    # driver.find_element_by_xpath('//*[@id="i1"]').send_keys("333")
    
    #通过css定位
    # driver.find_element_by_css_selector("#i1").send_keys("555")
    #
    # driver.find_element_by_css_selector('input[name="name"]').send_keys("666")
    
    """
    8种复数定位方式,在8种单数的基础是加复数形式,所有的复数返回的都是列表
    """
    # driver.find_elements_by_id()
    
    """
    最后两种
    """
    driver.find_elements_by_id()#可以按照下面的写法进行定位
    driver.find_element('id','i1')
    driver.find_elements()
    

    5、浏览器相关操作

    from  selenium import  webdriver
    
    """
    使用selenium对浏览器的操作
    """
    
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    js="window.scrollTo(0,0)"
    driver.execute_script(js)
    
    #获取浏览器大小
    # size=driver.get_window_size()
    # print(size)
    #
    # #设置浏览器的大小
    #
    # driver.set_window_size(200,200)
    #最大化
    # driver.maximize_window()
    # #截图
    # driver.get_screenshot_as_file('aa.png')
    
    #执行js
    # driver.execute_script('js')
    
    #switch切换浏览器窗口
    # driver.find_element_by_link_text("新建标签页面").click()
    #
    # #获取当前浏览器所打开全部tag标识
    # print(driver.window_handles)
    # #获取当前浏览当前tag的表示
    # print(driver.current_window_handle)
    #
    # handle=driver.window_handles[-1]
    # #切换到最新的页面,这个方法过期,已经不t推荐使用了
    # driver.switch_to_window(handle)
    # #最新使用这个方法
    # driver.switch_to.window(handle)
    #
    # driver.close()
    
    #勾选checkbox
    on=driver.find_element_by_css_selector("#on")
    
    off=driver.find_element_by_css_selector("#off")
    
    #判断是否已经勾选,已勾选返回true,未勾选返回false
    print(on.is_selected())
    print(off.is_selected())
    
    
    
    
    #关闭当前页面,当一个浏览器出现多个页面
    # driver.close()
    #退出驱动
    
    # driver.quit()
    

    6、iframe相关操作

    from  selenium import  webdriver
    
    """
    iframe的操作
    """
    
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    js="window.scrollTo(0,0)"
    driver.execute_script(js)
    
    #切换iframe
    
    driver.switch_to.frame("top-frame")
    
    driver.find_element_by_css_selector("#newtag").send_keys("1111")
    
    driver.switch_to.frame("baidu-frame")
    driver.find_element_by_css_selector("#kw").send_keys("222")
    #返回上一层
    
    driver.switch_to.parent_frame()
    driver.find_element_by_css_selector("#newtag").click()
    
    #直接返回默认层
    
    driver.switch_to.default_content()

    7、页面弹框相关操作

    from  selenium import  webdriver
    import time
    
    """
    弹框的操作
    """
    
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/uitester/")
    js="window.scrollTo(0,0)"
    driver.execute_script(js)
    
    #点击出现弹框
    # driver.find_element_by_css_selector("#alert").click()
    #
    # time.sleep(2)
    # #点击确认
    # driver.switch_to.alert.accept()
    
    #取消按钮
    driver.find_element_by_css_selector("#confirm").click()
    time.sleep(2)
    driver.switch_to.alert.dismiss()

    8、select相关操作

    from  selenium import  webdriver
    import time
    
    """
    select相关操作
    """
    
    driver=webdriver.Chrome()
    driver.get("http://ui.imdsx.cn/html/")
    js="window.scrollTo(0,1800)"
    driver.execute_script(js)
    
    sele=driver.find_element_by_xpath('//select[1]')
    
    from selenium.webdriver.support.select import Select
    
    #select模块只支持select元素
    #value=4的元素
    Select(sele).select_by_value("4")
    #角标为第3个的元素
    Select(sele).select_by_index(3)

    9、鼠标悬浮的相关操作

     1 element=driver.find_element_by_css_selector("#dis1")
     2 
     3 #判断元素是否可见,可见返回true,不可见返回false
     4 
     5 print(element.is_displayed())
     6 
     7 from selenium.webdriver.common.action_chains import ActionChains
     8 #1、先定位到鼠标要悬浮的元素
     9 a=driver.find_element_by_css_selector("#a")
    10 dis1=driver.find_element_by_css_selector('#dis1')
    11 #2、将鼠标移动到元素上,再进行点击
    12 ActionChains(driver).move_to_element(a).click(dis1).perform()

    10、鼠标的拖拽操作

     1 from  selenium import  webdriver
     2 import time
     3 
     4 """
     5 鼠标拖拽相关操作
     6 """
     7 
     8 driver=webdriver.Chrome()
     9 driver.get("http://ui.imdsx.cn/move/")
    10 
    11 s1=driver.find_element_by_css_selector('#dragger1')
    12 
    13 t1=driver.find_element_by_css_selector('#i1')
    14 
    15 from selenium.webdriver.common.action_chains import ActionChains
    16 
    17 #从s1拖拽到t1
    18 ActionChains(driver).drag_and_drop(s1,t1).perform()
  • 相关阅读:
    【1】【leetcode-33,81】 搜索旋转排序数组
    【leetcode-82,83,26,80】 删除排序链表/数组中的重复元素
    【leetcode-84】 柱状图中最大的矩形
    Objective-C之run loop详解
    ReactiveCocoa
    IOS响应式编程框架ReactiveCocoa(RAC)使用示例
    通过WireShark抓取iOS联网数据实例分析
    Receiver type for instance message is a forward
    Swift 高级运算符
    ios Instruments 内存泄露
  • 原文地址:https://www.cnblogs.com/zzzao/p/11108374.html
Copyright © 2020-2023  润新知