Selenium 定位元素(包括父子、兄弟)及常用操作

文章目录

  • selenium WebDriver定位元素
  • 父子、兄弟节点定位
  • 根据父节点定位子节点
  • 根据子节点定位父节点
  • 根据兄节点定位弟节点
  • 根据弟节点定位兄节点
  • 在元素上操作
  • click()
  • send_keys()
  • 获取元素上的文本
  • clear()
  • get_attribute()
  • WebDriverWait
  • selenium WebDriver定位元素

  • id定位:find_element_by_id()
  • name定位:find_element_by_name()
  • class定位:find_element_by_class_name()
  • link定位:find_element_by_link_text()
  • partial link定位:find_element_by_partial_link_text()
  • tag定位:find_element_by_tag_name()
  • xpath定位:find_element_by_xpath()
  • css定位:find_element_by_css_selector()
  • #-----------------------------------------------------------------------
    # 通过元素id定位
    #-----------------------------------------------------------------------
    driver.find_element_by_id("userid")
    
    #-----------------------------------------------------------------------
    # 通过class_name定位
    #-----------------------------------------------------------------------
    # 通过class_name定位一个元素
    driver.find_element_by_class_name("userclass")
    
    # 通过class_name定位一批元素,返回结果为数组,下标从0开始
    driver.find_elements_by_class_name("userclass")
    driver.find_elements_by_class_name("userclass")[1].click()
    
    #-----------------------------------------------------------------------
    # 通过xpath定位元素
    #-----------------------------------------------------------------------
    # 根据元素属性和值定位
    # 定位id="userid"的元素
    driver.find_element_by_xpath("//*[@id=\"userid\"]")
    
    # 定位placeholder属性为"请输入名字"的input元素,即<input placeholder="请输入名字">
    driver.find_element_by_xpath("//input[@placeholder=\"请输入名字\"]")
    
    # 定位id="userid"元素-下层元素span-下层元素第二个input
    driver.find_element_by_xpath("//*[@id=\"userid\"]/span/input[1]")
    
    # 多条件定位
    driver.find_element_by_xpath("//input[@name=\"username\" and @value=\"lxm\"]")
    //input[@name='continue'][@type='button']  # 待验证
    driver.find_element_by_id("id").find_element_by_class_name("name")  # 待验证
    
    # 根据文本定位元素
    # 定位文本为“世界真美好”的li元素
    driver.find_element_by_xpath("//li[text()=\"世界真美好\"]")
    # 定位文本为“我爱这个世界”的span元素
    driver.find_element_by_xpath("//span[text()=\"我爱这个世界\"]")
    
    # 定位文本为“世界真美好”的li元素-可传入变量
    str = "世界真美好"
    driver.find_element_by_xpath("//li[text()=\"%s\"]" % str)
    
    
    # 根据关键字
    driver.find_element_by_xpath("//a[contains(@href,\"#id1\")]")
    
    #在a标签下有个文本(text)包含(contains)'网页' 的元素
    driver.find_element_by_xpath("//a[contains(text(),'网页')]").click()
    
    #有个叫a的标签,他有个链接href='http://www.baidu.com/ 的元素
    driver.find_element_by_xpath("//a[@href='http://www.baidu.com/']").click()
    
    
    
    #-----------------------------------------------------------------------
    # 通过tag定位元素
    #-----------------------------------------------------------------------
    # 查找input标签的元素
    driver.find_element_by_tag_name("input")
    
    

    父子、兄弟节点定位

    .表示当前节点,…表示父节点,/表示绝对路径,//表示相对路径

    根据父节点定位子节点

    driver.find_element_by_xpath("//*[text()=\"国家\"]/div/input/span")
    # child::input选取当前节点的input子节点
    driver.find_element_by_xpath("//*[text()=\"国家\"]/child::div/child::input/child::span")
    
    

    根据子节点定位父节点

    # ..表示父节点
    driver.find_element_by_xpath("//*[text()=\"上海\"]/../../span")
    # parent::span选取当前节点的span父节点
    driver.find_element_by_xpath("//div[text()=\"上海\"]/parent::*/parent::span")
    

    根据兄节点定位弟节点

    # 通过兄节点找到父节点,由父节点定位弟节点
    driver.find_element_by_xpath("//*[text()=\"上海\"]/../span[3]")
    # following-sibling 选取当前节点之后的同级节点
    driver.find_element_by_xpath("//*[text()=\"上海\"]/following-sibling::span")
    driver.find_element_by_xpath("//*[text()=\"上海\"]/following-sibling::span[2]")
    

    根据弟节点定位兄节点

    # 通过弟节点找到父节点,由父节点定位兄节点
    driver.find_element_by_xpath("//*[text()=\"上海\"]/../span[0]")
    # preceding-sibling 选取当前节点之前的同级节点
    driver.find_element_by_xpath("//*[text()=\"上海\"]/preceding-sibling::span")
    

    在元素上操作

    click()

    # 点击操作
    click()
    
    # 单击id为userid的元素
    driver.find_element_by_id("userid").click()
    

    send_keys()

    # 向元素发送文本
    send_keys("luxuemei")
    
    # 向id为userid的元素填充文本luxuemei
    driver.find_element_by_id("userid").send_keys("luxuemei")
    

    获取元素上的文本

    # 获取元素文本
    driver_text = driver.find_element_by_id("userid").text
    

    clear()

    # 清除元素的内容,如清除input框内的文字
    driver.find_element_by_id("userid").clear()
    

    get_attribute()

    # 获取元素属性值
    driver.find_element_by_id("userid").get_attribute("value")
    

    WebDriverWait

    # 文件引入
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至30s超时抛出异常
    # 可用来检查页面元素是否加载完成
    WebDriverWait(driver, 30, 0.5).until(EC.presence_of_element_located(By.ID, "userid"))
    
  • 官网地址:Locator strategies | Selenium
  • 参考文档:http://www.selenium.org.cn/category/use
  • 物联沃分享整理
    物联沃-IOTWORD物联网 » Selenium 定位元素(包括父子、兄弟)及常用操作

    发表评论