zoukankan      html  css  js  c++  java
  • 【重要】Selenium2+python自动化44-元素定位参数化(find_element)

    转:https://www.cnblogs.com/yoyoketang/p/6551274.html

    前言

    元素定位有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把八种定位合为一种呢?也就是把定位的方式参数化,如id,name.css等设置为一个参数,这样只需维护定位方式的参数就行了。

    小编曾经自己封装过这种方法,最后定位方法写成这样:find_element("id=kw"),find_element("css=#kw"),这个思路是来源于RF框架里面的,等号前面是定位方法,等号后面是元素名称。

    这两天闲着无事查看定位方法的源码,发现了新大陆,忍不住想分享给小伙伴。

    一、find_element()

    1.selenium元素定位里面其实是有这个方法的,只是大部分时候都是结合By方法使用,如下图

    二、查看find_element方法源码

    1.find_element跟find_element_by_xxx到底有什么区别呢?好奇害死猫啊,找到这个路径:Libsite-packagesseleniumwebdriver emoteutils.py

    2.打开文件夹后发现,其实定find_element_by_xxx的方法都是返回的find_element方法,也就是说那八个定位方法其实就是八个小分支。

    三、By定位方法

    1.找到这个路径:Libsite-packagesseleniumwebdrivercommony.py

    2.打开by这个模块,其实里面很简单啊,就是几个字符串参数。

    3.那么问题就简单了,其实压根可以不用绕这么大弯路去导入这个模块啊,说实话,我一点都不喜欢去导入这个By,总觉得太繁琐。

    """
    The By implementation.
    """


    class By(object):
        """
        Set of supported locator strategies.
        """

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

    四、定位参数化

    1.小编一直追求简单粗暴的方式,接下来就用最简单的方法去定位

    2.总结下几种定位方法(字符串中间是空格需注意)

    by_id= "id"
    by_xpath = "xpath"
    by_link_text = "link text"
    by_partial_text = "partial link text"
    by_name = "name"
    by_tag_name = "tag name"
    by_class_name = "class name"
    by_css_selector = "css selector"

    五、参考代码

    # coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    driver = webdriver.Firefox()
    driver.get("https://www.baidu.com/")

    driver.find_element("id", "kw").send_keys("yoyoketang")
    driver.find_element('css selector', "#su").click()

    # 其它定位参考 交流QQ群:232607095
    # t1 = driver.find_element("link text", "糯米").text
    # print t1
    # t2 = driver.find_element("name", "tj_trnews").text
    # print t2
    # t3 = driver.find_element("class name", "bri").text
    # print t3

  • 相关阅读:
    WCF客户端链接服务超时客户端close
    C# byte数组常用扩展浅析(转)
    代码生成相关工具及技术
    已处理证书链,但是在不受信任提供程序信任的根证书中终止。
    清理SQL Server数据库日志的两种方法
    开源框架项目列表
    SQL Server数据库文件恢复技术
    VS2008找不到导出模板
    jquery 学习笔记(二)
    方法的参数的默认值设置
  • 原文地址:https://www.cnblogs.com/yrxns/p/9687037.html
Copyright © 2011-2022 走看看