<译>Selenium Python Bindings 4 - Locating Eelements

  有各种不同的策略来定位页面中的元素。你可以使用最合适定位方式用于你的用例。Selenium提供了以下方法来定位页面中的元素:

  • 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

  为了找到多个元素(这些方法会返回一个列表):

  • 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

  1. Locating by
    ID

    当你知道一个元素的id属性,请使用方法。在此策略下,与id属性值相匹配的位置的第一个元素将被返回。如果没有元素能匹配id属性,一个NoSuchElementException异常将抛出。
    为了测试,考虑这个页面的源代码:


    <html>
    <body>
    <form id="loginForm">
    <input name="username" type="text" />
    <input name="password" type="password" />
    <input name="continue" type="submit" value="Login" />
    </form>
    </body>
    <html>

    表格元素可以这样定位:

    login_form = driver.find_element_by_id(‘loginForm‘)

  2. Locating by
    Name

    当你知道一个元素的name属性,请使用方法。在此策略下,与name属性值相匹配的位置的第一个元素将被返回。如果没有元素能匹配name属性,一个NoSuchElementException异常将抛出。
    为了测试,考虑这个页面的源代码:


    <html>
    <body>
    <form id="loginForm">
    <input name="username" type="text" />
    <input name="password" type="password" />
    <input name="continue" type="submit" value="Login" />
    <input name="continue" type="button" value="Clear" />
    </form>
    </body>
    <html>

    username & password 元素可以这样定位:

    username = driver.find_element_by_name(‘username‘)
    password = driver.find_element_by_name(‘password‘)

    页面中第一个"continue"会被先执行(当元素的name一样时,先被定位的先执行),代码如下:

    continue = driver.find_element_by_name(‘continue‘)

  3. Locating by XPath

    XPath是一种用于在XML文档中定位节点使用的语言。HTML可以当作是XML ( XHTML
    )的实现,Selenium用户可以利用这个强大的语言定位他们Web应用程序中的元素。
    XPath继承超出(以及配套)由id或name属性定位的简单方法,并开辟了各种新的可能性,如定位页面上的第三个复选框。

    使用XPath最主要的原因是,当你想定位元素没有合适的id或name属性。您可以使用XPath定位元素的绝对路径(不建议)
    ,或相对于确实有一个id或name属性的元素。 XPath定位,也可用于其他指定的其他元素。

    绝对的XPath包含从根(HTML)的所有元素的位置,其结果有可能会失败。通过查找附近有一个id或name属性的元素,你可以根据关系找到您的目标元素。这是不太可能改变的关系,可以让你的测试更强大。

    为了测试,考虑这个页面的源代码:


    <html>
    <body>
    <form id="loginForm">
    <input name="username" type="text" />
    <input name="password" type="password" />
    <input name="continue" type="submit" value="Login" />
    <input name="continue" type="button" value="Clear" />
    </form>
    </body>
    <html>

    页面form元素可以这样定位:

    login_form = driver.find_element_by_xpath("/html/body/form[1]")
    login_form = driver.find_element_by_xpath("//form[1]")
    login_form = driver.find_element_by_xpath("//form[@id=‘loginForm‘]")

    ①绝对路径

    ②页面HTML中第一个form
    ③form元素的id属性

    username 元素可以这样定位:

    username = driver.find_element_by_xpath("//form[input/@name=‘username‘]")
    username = driver.find_element_by_xpath("//form[@id=‘loginForm‘]/input[1]")
    username = driver.find_element_by_xpath("//input[@name=‘username‘]")

    clear 按钮可以这样定位:

    clear_button = driver.find_element_by_xpath("//input[@name=‘continue‘][@type=‘button‘]")
    clear_button = driver.find_element_by_xpath("//form[@id=‘loginForm‘]/input[4]")

  4. Locating Hyperlinks by Link
    Text

    当你知道一个锚标签中使用的链接文本可以使用此方法。在此策略下,与链接文本值相匹配的位置的第一个元素将被返回。如果没有元素能匹配name属性,一个NoSuchElementException异常将抛出。
    测试用HTML代码如下:


    <html>
    <body>
    <p>Are you sure you want to do this?</p>
    <a href="continue.html">Continue</a>
    <a href="cancel.html">Cancel</a>
    </body>
    <html>

    可以使用下面的方法来定位link:

    continue_link = driver.find_element_by_link_text(‘Continue‘)
    continue_link = driver.find_element_by_partial_link_text(‘Conti‘)

  5. Locating Elements by Tag
    Name
    当你想使用标签定位元素的时候,你可以使用此方法。使用此策略,第一个和元素匹配的标签将被返回,如果没有,则会异常抛出:
    测试用HTML代码:

    <html>
    <body>
    <h1>Welcome</h1>
    <p>Site content goes here.</p>
    </body>
    <html>

    当你想定位(h1)元素的时候,你可以这样定位:

    heading1 = driver.find_element_by_tag_name(‘h1‘)

  6. Locating Elements by Class
    name

    当你想使用元素class属性名定位的时候,你可以使用此策略。页面第一个匹配的class
    名将被返回,如果没有匹配的class name,则会抛出异常:
    测试用HTML代码:

    <html>
    <body>
    <p class="content">Site content goes here.</p>
    </body>
    <html>

    p标签定位方法如下:

    content = driver.find_element_by_class_name(‘content‘)

  7. Locating Elements by CSS
    Selectors
    当你想通过CSS选择器定位元素的时候,你可以使用此策略,如果没有匹配的css选择器,那么异常将会抛出:
    测试用HTML代码如下:

    <html>
    <body>
    <p class="content">Site content goes here.</p>
    </body>
    <html>

    定位方法如下:

    content = driver.find_element_by_css_selector(‘p.content‘)

<译>Selenium Python Bindings 4 - Locating
Eelements

时间: 2024-08-01 10:45:45

<译>Selenium Python Bindings 4 - Locating Eelements的相关文章

&lt;译&gt;Selenium Python Bindings 5 - Waits

如今,大多数的Web应用程序使用AJAX技术.当页面加载到浏览器,页面中的元素也许在不同的时间间隔内加载.这使得元素很难定位,如果在DOM中的元素没有呈现,它将抛出ElementNotVisibleException异常.使用waits,我们可以解决这个问题. Selenium WebDriver 提供两种类型的waits -- 隐式和显式.显式的wait使webdriver等待发生之前,继续执行一定的条件.一个隐式的wait使webdriver DOM在一定时间后,试图定位元素. Explic

&lt;译&gt;Selenium Python Bindings 3 - Navigating

当你想要通过webdriver导航到一个链接,正常的方式点是通过调用get方法: driver.get("http://www.google.com") Interacting with the page在页面中的HTML元素.如果我们需要找到定位一个.那么webdriver提供了许多方法来寻找元素.例如给了一个HTML的标签: <input type="text" name="passwd" id="passwd-id"

&lt;译&gt;Selenium Python Bindings 6 - WebDriver API

本章涉及Selenium WebDriver的所有接口. Recommended Import Style 推荐的导入风格如下: from selenium import webdriver 然后,你可以这样访问所有的类: webdriver.Firefox webdriver.FirefoxProfile webdriver.Chrome webdriver.ChromeOptions webdriver.Ie webdriver.Opera webdriver.PhantomJS webdr

selenium python bindings 初步用法及简单参考例子

掌握selenium最简单的方法就是参考例子进行学习,下面给出之前项目的测试例子及分析 # -*- coding: utf-8 -*- import time from selenium import webdriver # 使用firefox浏览器来展示效果,创建了selenium WebDriver的实例 driver = webdriver.Firefox() #driver.get方法打开测试网址 127.0.0.1:8000/ChasingSomeone driver.get('htt

python爬虫积累(一)--------selenium+python+PhantomJS的使用

最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战链接:python爬虫实战(一)--------中国作物种质信息网 一.Selenium介绍 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试.换句话说叫 Selenium 支持这些浏览器驱动.Selenium支持

selenium+python在mac环境上的搭建

前言 mac自带了python2.7的环境,所以在mac上安装selenium环境是非常简单的,输入2个指令就能安装好 需要安装的软件: 1.pip 2.selenium2.53.6 3.Firefox44.dmg 4.Pycharm (环境搭配selenium2+Firefox46及以下版本兼容,selenium3+Firefox47+geckodriver) 一.selenium安装 1.mac自带了python2.7,python里面又自带了easy_install工具,所以安装pip用e

Selenium Python浏览器调用:伪浏览器

WebDriver驱动介绍 因为移动端的driver目前没有接触,所以主要介绍PC端driver,PC端的driver都是基于浏览器的,主要分为2种类型: 一种是真实的浏览器driver:safari.firefox.ie.chrome等 比如:safari.firefox.ie.chrome都是通过浏览器原生组件来调用浏览器的原生API,这些driver都是直接启动并通过调用浏览器的底层接口来驱动浏览器的,因此具有最真实的用户场景模拟,主要用于进行web的兼容性测试使用. 一种是伪浏览器dri

Page Object Model (Selenium, Python)

时间 2015-06-15 00:11:56  Qxf2 blog 原文  http://qxf2.com/blog/page-object-model-selenium-python/ 主题 SeleniumPython We have come a long way since our post on implementing the Page Object Model - Implementing the Page Object Model (Selenium + Python) Whil

selenium + python自动化测试环境搭建--亲测

环境准备: 1.下载所学安装包: setuptools https://pypi.python.org/packages/2.7/s/setuptools/ selenium https://pypi.python.org/pypi/selenium 2.安装 1).安装setuptools (注意,这个必须安装,否则安装selenium会报错) python2.7进入windows命令提示下执行ez_setup.py: 到此setuptools安装成功 2).安装selenium python