zoukankan      html  css  js  c++  java
  • Selenium Java 页面元素定位2

    一、操作目的

    1.1 自动化测试常用操作

    1、定位网页上的元素,并存储到一个变量中;
    2、对变量进行操作,比如点击或输入文字;
    3、设定页面元素的操作值;

    二、定位方法汇总

    2.1 findElement(s)

    click(self, on_element=None)
    click_and_hold(self, on_element=None)
    context_click(self, on_element=None)
    double_click(self, on_element=None)
    drag_and_drop(self, source, target)
    drag_and_drop_by_offset(self, source, xoffset, yoffset)
    key_down(self, value, element=None)
    key_up(self, value, element=None)
    move_by_offset(self, xoffset, yoffset)
    move_to_element(self, to_element)
    move_to_element_with_offset(self, to_element, xoffset, yoffset)
    pause(self, seconds)
    perform(self)
    release(self, on_element=None)
    reset_actions(self)
    send_keys(self, *keys_to_send)
    send_keys_to_element(self, element, *keys_to_send)
    

    2.2、selenium.webdriver.common.by

    CLASS_NAME = 'class name'
    CSS_SELECTOR = 'css selector'
    ID = 'id'
    LINK_TEXT = 'link text'
    NAME = 'name'
    PARTIAL_LINK_TEXT = 'partial link text'
    TAG_NAME = 'tag name'
    XPATH = 'xpath'
    

    2.3、selenium.webdriver.common.keys

    ADD = 'ue025'
    ALT = 'ue00a'
    ARROW_DOWN = 'ue015'
    ARROW_LEFT = 'ue012'
    ARROW_RIGHT = 'ue014'
    ARROW_UP = 'ue013'
    BACKSPACE = 'ue003'
    BACK_SPACE = 'ue003'
    CANCEL = 'ue001'
    CLEAR = 'ue005'
    COMMAND = 'ue03d'
    CONTROL = 'ue009'
    DECIMAL = 'ue028'
    DELETE = 'ue017'
    DIVIDE = 'ue029'
    DOWN = 'ue015'
    END = 'ue010'
    ENTER = 'ue007'
    EQUALS = 'ue019'
    ESCAPE = 'ue00c'
    F1 = 'ue031'
    F10 = 'ue03a'
    F11 = 'ue03b'
    F12 = 'ue03c'
    F2 = 'ue032'
    F3 = 'ue033'
    F4 = 'ue034'
    F5 = 'ue035'
    F6 = 'ue036'
    F7 = 'ue037'
    F8 = 'ue038'
    F9 = 'ue039'
    HELP = 'ue002'
    HOME = 'ue011'
    INSERT = 'ue016'
    LEFT = 'ue012'
    LEFT_ALT = 'ue00a'
    LEFT_CONTROL = 'ue009'
    LEFT_SHIFT = 'ue008'
    META = 'ue03d'
    MULTIPLY = 'ue024'
    NULL = 'ue000'
    NUMPAD0 = 'ue01a'
    NUMPAD1 = 'ue01b'
    NUMPAD2 = 'ue01c'
    NUMPAD3 = 'ue01d'
    NUMPAD4 = 'ue01e'
    NUMPAD5 = 'ue01f'
    NUMPAD6 = 'ue020'
    NUMPAD7 = 'ue021'
    NUMPAD8 = 'ue022'
    NUMPAD9 = 'ue023'
    PAGE_DOWN = 'ue00f'
    PAGE_UP = 'ue00e'
    PAUSE = 'ue00b'
    RETURN = 'ue006'
    RIGHT = 'ue014'
    SEMICOLON = 'ue018'
    SEPARATOR = 'ue026'
    SHIFT = 'ue008'
    SPACE = 'ue00d'
    SUBTRACT = 'ue027'
    TAB = 'ue004'
    UP = 'ue013'
    

    2.4、selenium.webdriver.Chrome

    函数 描述
    back() 返回
    close() 关闭当前窗口
    delete_all_cookies() 删除所有 cookies
    delete_cookie('name') 按名字删除 cookie
    find_element(by='id', value=None) 查找给定标识符的元素
    find_element_by_class_name('name') 通过类名来定位元素
    find_element_by_css_selector('css_selector') 通过 css 选择器来定位元素
    find_element_by_id('id') 通过 id 来定位元素
    find_element_by_link_text('link_text') 通过链接内容来定位元素
    find_element_by_partial_link_text('link_text') 通过链接部分内容来定位元素
    find_element_by_name('name') 通过元素名称来定位元素
    find_element_tag_name('name') 通过标签名来定位元素
    find_element_by_xpath('xpath') 通过 xpath 来定位元素
    find_elements(by='id', value=None)
    find_elements_by_class_name('name')
    find_elements_by_css_selector('css_selector')
    find_elements_by_id('id')
    find_elements_by_link_text('text')
    find_elements_by_partial_link_text('link_text')
    find_elements_by_name('name')
    find_elements_by_tag_name('name')
    find_elements_by_xpath('xpath')
    forward() 向前
    fullscreen_window() 全屏
    get('url') 访问 url 页面
    get_cookie(''name') 通过名称获取 cookie
    get_cookies() 获取所有 cookies
    get_log('log_type') 获取日志,类型有:browserdriverclientserver
    get_screenshot_as_base64(self) 获取图片存为 base64 编码
    get_screenshot_as_file('file_name') 获取图片存为文件,需要指定文件名,png 后缀
    get_screenshot_as_png() 将图片存为二进制数据
    get_window_position(windowHandle='current') 获取当前窗口的 x,y 位置
    get_window_rect() 获取 x,y 坐标和当前窗口的宽高
    get_window_size(windowHandle='current') 获取当前窗口的宽高
    implicitly_wait('time_to_wait) 隐式等待一个元素加载或命令执行完成的时间。
    maximize_window() 最大化
    minimize_window() 最小化
    refresh() 刷新
    save_screenshot('findname') 保存屏幕截图
    set_page_load_timeout('time_to_wait')
    set_script_timeout('time_to_wait')
    set_window_position(x, y, windowHandle='current')
    set_window_rect(x, y, width, height)
    set_window_size(width, height, windowHandle='current')
    start_client()
    start_session(capabilities, browser_profile=None)
    stop_client()
    switch_to_active_element()
    switch_to_alert()
    switch_to_default_content()
    switch_to_frame('frame_reference') 切换到指定框架
    switch_to_window('window_name') 切换到指定窗口

    那么总的来说,查找元素分为以下两类:
    1、查到单个元素

    find_element_by_id
    find_element_by_name
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector
    

    2、查找多个元素(返回列表)

    find_elements_by_name
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector
    

    上面的是公有方法,还有两个私有方法是:

     find_element()
     find_elements()
     # 这两个方法使用的时候,需要提供两个参数
     # 一个是 By.xx ,这里的 xx 分别是上面列出的几种定位方法的大写
     # 比如 find_element(By.ID, 'su')
     # 比如 find_element(By.CSS_SELECTOR, 'h1')
    

    三、编写实际代码测试

    3.1 元素定位

    // id 定位
    WebElement username = driver.findElement(By.id("username"));
    // name 定位
    WebElement username = driver.findElement(By.name("username"));
    // 部分链接文字定位
    WebElement link = driver.findElement(By.partialLinkText("sog"));
    // 使用标签名定位
    WebElement link = driver.findElement(By.tagName("a"));
    // 使用 class 名定位 
    WebElement input = driver.findElement(By.className("tight"));
    // 使用xpath定位
    WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value='查询']"));
    // 上述xpath使用的是绝对路径定位,当页面发生变化时,很容易造成代码失效。
    // 所以推荐使用相对路径,比如将上述定位改成:"//input[@value='查询']"
    // 如果定位元素是列表时,下标从1开始
    
    // css定位
    WebElement button = driver.findElement(By.cssSelector("input#div > input#ok"));
    WebElement button = driver.findElement(By.cssSelector("input#div > input + a + img"));
    WebElement button = driver.findElement(By.cssSelector("input:nth-child(2)"));
    WebElement button = driver.findElement(By.cssSelector("input#div :nth-child(2)"));
    WebElement button = driver.findElement(By.cssSelector("a['href' ^= 'http://www.baidu.com']"));
    // ^= 匹配开头,$= 匹配结尾 *= 链接含有即匹配中
    

    xpath模糊定位

    xpath函数 定位表达式 解释
    Starts-with() //img[starts-with(@alt,'div1')] 查找图片alt属性开始位置包含“div1“关键字的页面元素
    Contains() //img[contains(@alt,'g1')] 查找图片alt属性包含“gl“关键字的页面元素

    XPath 轴(Axis)定位:

    关键字 含义 实例 解释
    parent 选择当前节点的上层节点 //img[@alt='ok']/parent::div 查找alt属性为ok的图片,然后向定位上层div元素
    child
    ancestor 所有上层节点
    descendant 所有下层节点
    following 当前节点之后所有节点
    following-sibling 后面所有同级节点
    preceding 当前节点之前所有节点
    preceding-sibling 前面所有同级节点
    有了计划记得推动,不要原地踏步。
  • 相关阅读:
    Java常用类之【日期相关类】
    Java常用类之【Math类、Random类、System类、Runtime类】
    Java常用类之【字符串相关类型】
    Java常用类之【八种基本数据类型】
    打印杨辉三角--for循环
    Eclipse设置文字大小
    Eclipse之JSON导包
    Java中设计模式之工厂模式-4
    PC 微信页面倒计时代码 safari不兼容date的问题
    在apache中设置访问目录后进入的默认页面为index.php
  • 原文地址:https://www.cnblogs.com/amnotgcs/p/13774051.html
Copyright © 2011-2022 走看看