• Selenium2+python自动化44-元素定位参数化(find_element)【转载】


    前言

    元素定位有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把八种定位合为一种呢?也就是把定位的方式参数化,如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

    看完之后有没有一种踏破铁鞋无觅处,得来全不费功夫的感觉。觉得对你有帮助,就在右下角点个赞吧,感谢小伙伴!

  • 相关阅读:
    freebsd安装mysql
    freebsd安装ports
    分布式拒绝服务攻击
    如何用命令获知当前是一年中的第多少周和今天是周几
    freebsd软件包下载地址
    mod_wsgi的两种模式
    freebsd中/etc/rc.conf配置文件导致不能启动的问题
    进程ID[PID(Process ID)]与端口号[(Port ID)]的联系
    Java EE之HttpServletRequest
    Chrome之控制台使用【转载】
  • 原文地址:https://www.cnblogs.com/caoj/p/7814145.html
Copyright © 2020-2023  润新知