zoukankan      html  css  js  c++  java
  • selenium 难定位元素,时间插件,下拉框定位,string包含,定位列表中的一个,技巧

    • 关于frame:

    1. 如果网页存在iframe的话,传统的定位有时候找不到元素,需要切换frame;
            # 切换到leftFrame定位“测井设计”
            driver.switch_to_frame("leftFrame")
            driver.find_element_by_link_text(u"设计").click()
            # 切换到rightFrame定位“设计”(先回到主内容再次定位,否则二次定位认为嵌套)
            driver.switch_to_default_content()
            driver.switch_to_frame("rightFrame")
            driver.find_element_by_id("start").click()

           2.有些插件用的也是frame,如时间插件

           # 先定位到时间选择框,点击
            driver.find_element_by_id("logmin").click()
            #通过xpath定位frame
            frames = driver.find_element_by_xpath("/html/body/div[2]/iframe")
            #切换到frame
            driver.switch_to_frame(frames)
            # 选择2017-1-5,通过xpath定位,点击
            driver.find_element_by_xpath(
                "/html/body/div/div[3]/table/tbody/tr[2]/td[5]").click()
            # 最后切换回原来和右边的frame
            driver.switch_to_default_content()
            driver.switch_to_frame("rightFrame")
    • 关于下拉框

    1. 一般的下拉框可以通过二次定位来实现;
    #定位列表的一组数据
    names = driver.find_element_by_xpath("//*[@id='DataTables_Table_0']/tbody").find_elements_by_tag_name("input")

           2.如果下拉框的标签是option,可以用select;

      #选择select定位
            Select(driver.find_element_by_name("isImportant2")
                   ).select_by_visible_text(u"")

           3.如果下拉框不是上面这种形式,而是调用其他地方生成的list,定位的时候,我目前没有非常好的法子。取了一个折中法子,使用键盘"上下键+enter"选择;

            #选择xpath定位到下拉列表,选择向下,点击回车,进行选择
            well = driver.find_element_by_xpath(
                "/html/body/span/span/span[2]/ul/li[1]")
            well.send_keys(Keys.DOWN)
            well.send_keys(Keys.ENTER)
    • 关于定位一列数据中的某一个;

    1. 定义了一个函数findname.py,获得含有关键字的列表名称,并返回list最大值;
    def fnn(names, keys):
        k = []
        for name in names:
            #循环获得属性为value的值
            s = name.get_attribute("value")
            #找到包含关键字keys的字符串
            if keys in s:
                k.append(s)
        newest = max(k)
        return newest
    #先定位到列表,在定位input,返回list
            names = driver.find_element_by_xpath(
                "//*[@id='DataTables_Table_0']/tbody").find_elements_by_tag_name("input")
            #关键字keys为zs
            name = findname.fnn(names, "zs")
            driver.find_element_by_link_text(name).click()
    • 字符串包含判断:关键字 in string;

    • def fnn(names, keys):
          k = []
          for name in names:
              #循环获得属性为value的值
              s = name.get_attribute("value")
              #找到包含关键字keys的字符串
              if keys in s:
                  k.append(s)
          newest = max(k)
          return newest
  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/breakcircle/p/6297158.html
Copyright © 2011-2022 走看看