转自:https://blog.csdn.net/wd168/article/details/51819930

web通常包含了Hyper Text Markup Language (HTML)、Cascading Style Sheets (CSS)和JavaScript。本节主要内容如下:

  • 了解更多Selenium webDriver查找元素的知识

  • 使用各种浏览器提供的开发工具找到和定位元素

  • 多种发现元素的方法:ID、Name、类属性值、XPath、CSS选择器

  • Selenium webDriver中的各种find_element_by方法。

一般的浏览器都有查看源码的功能 。

使用开发工具发现定位器

Firefox的插件Firebug是个好帮手,可以F12或者右键点击元素选择“Inspect Element with Firebug”打开。Firefox的搜素框还可以对XPath或CSS进行查找。

Chrome中可以F12或者右键点击元素选择“Inspect Element”的方式查看代码。查找功能也和Firefox类似。Internet Explorer也有类似功能,不再赘述。

元素查找

find_element_by*系列方法在找到元素的时候返回WebElement实例,否则产生NoSuchElementException异常。另外find_elements_by*系列方法可以一次返回多个元素。

driver.find_element_by_css_selector(‘#search’)

Method Description Argument Example
find_element_by_id(id) This method finds an element by the ID attribute value id: The ID of the element to be found driver.find_element_by_id(‘search’)
find_element_by_name(name) This method finds an element by the name attribute value name: The name of the element to be found driver.find_element_by_name(‘q’)
find_element_by_class_name(name) This method finds an element by the class attribute value name: The class name of the element to be found driver.find_element_by_class_name(‘input-text’)
find_element_by_tag_name(name) This method finds an element by its tag name name: The tag name of the element to be found driver.find_element_by_tag_name(‘input’)
find_element_by_xpath(xpath) This method finds an element using XPath xpath: The xpath of the element to be found driver.find_element_by_xpath(‘form[0]/div[0]/input[0]’)
find_element_by_css_selector(css_selector) This method finds an element by the CSS selector css_selector: The CSS selector of the element to be found  
       
find_element_by_link_text(link_text) This method finds an element by the link text link_text: The text of the element to be found driver.find_element_by_link_text(‘Log In’)
find_element_by_partial_link_text(link_text) This method finds an element by a partial match of its link text link_text: The text to match part of the text of the element driver.find_element_by_partial_link_text(‘Log’)

通过id、name、类属性是最建议,也是最快速的查找方法,尤其是id和name。其次使用tag和链接文本,万不得已才使用xpath和css。

XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。参考:XPath维基百科介绍 以及w3schools的Xpath介绍zvon的XPath 1.0介绍。参考书籍:Selenium Testing Tools        Cookbook。注意XPath的速度会比CSS还慢,不过支持向前向后定义和相对路径。

层叠样式表(英语:Cascading Style Sheets,简写CSS),又称串样式列表、层次结构式样式表文件,一种用来为结构化文档(如HTML文档或XML应用)添加样式(字体、间距和颜色等)的计算机语言。参考CSS维基百科介绍w3schools之CSS介绍 和

实例

  1. import unittest
  2. from selenium import webdriver
  3. class HomePageTest(unittest.TestCase):
  4. @classmethod
  5. def setUpClass(cls):
  6. # create a new Firefox session
  7. cls.driver = webdriver.Firefox()
  8. cls.driver.implicitly_wait(30)
  9. cls.driver.maximize_window()
  10. # navigate to the application home page
  11. cls.driver.get('http://demo-store.seleniumacademy.com/')
  12. def test_search_text_field_max_length(self):
  13. # get the search textbox
  14. search_field = self.driver.find_element_by_id('search')
  15. # check maxlength attribute is set to 128
  16. self.assertEqual('128', search_field.get_attribute('maxlength'))
  17. def test_search_button_enabled(self):
  18. # get Search button
  19. search_button = self.driver.find_element_by_class_name('button')
  20. # check Search button is enabled
  21. self.assertTrue(search_button.is_enabled())
  22. def test_my_account_link_is_displayed(self):
  23. # get the Account link
  24. account_link = self.driver.find_element_by_link_text('ACCOUNT')
  25. # check My Account link is displayed/visible in the Home page footer
  26. self.assertTrue(account_link.is_displayed())
  27. def test_account_links(self):
  28. # get the all the links with Account text in it
  29. account_links = self.driver.\
  30. find_elements_by_partial_link_text('ACCOUNT')
  31. # check Account and My Account link is displayed/visible in the Home page footer
  32. self.assertTrue(len(account_links), 2)
  33. def test_count_of_promo_banners_images(self):
  34. # get promo banner list
  35. banner_list = self.driver.find_element_by_class_name('promos')
  36. # get images from the banner_list
  37. banners = banner_list.find_elements_by_tag_name('img')
  38. # check there are 3 banners displayed on the page
  39. self.assertEqual(3, len(banners))
  40. def test_vip_promo(self):
  41. # get vip promo image
  42. vip_promo = self.driver.\
  43. find_element_by_xpath("//img[@alt='Shop Private Sales - Members Only']")
  44. # check vip promo logo is displayed on home page
  45. self.assertTrue(vip_promo.is_displayed())
  46. # click on vip promo images to open the page
  47. vip_promo.click()
  48. # check page title
  49. self.assertEqual("VIP", self.driver.title)
  50. def test_shopping_cart_status(self):
  51. # check content of My Shopping Cart block on Home page
  52. # get the Shopping cart icon and click to open the Shopping Cart section
  53. shopping_cart_icon = self.driver.\
  54. find_element_by_css_selector('div.header-minicart span.icon')
  55. shopping_cart_icon.click()
  56. # get the shopping cart status
  57. shopping_cart_status = self.driver.\
  58. find_element_by_css_selector('p.empty').text
  59. self.assertEqual('You have no items in your shopping cart.',
  60. shopping_cart_status)
  61. # close the shopping cart section
  62. close_button = self.driver.\
  63. find_element_by_css_selector('div.minicart-wrapper a.close')
  64. close_button.click()
  65. @classmethod
  66. def tearDownClass(cls):
  67. # close the browser window
  68. cls.driver.quit()
  69. if __name__ == '__main__':
  70. unittest.main(verbosity=2)

执行结果:

# python        homepagetest.py
test_account_links (__main__.HomePageTest) ... ok
test_count_of_promo_banners_images (__main__.HomePageTest) ... ok
test_my_account_link_is_displayed (__main__.HomePageTest) ... ok
test_search_button_enabled (__main__.HomePageTest) ... ok
test_search_text_field_max_length (__main__.HomePageTest) ... ok
test_shopping_cart_status (__main__.HomePageTest) ... ok
test_vip_promo (__main__.HomePageTest) ... ok
----------------------------------------------------------------------
Ran 7 tests in 77.086s

OK

使用Python学习selenium测试工具-4:查找元素的更多相关文章

  1. 【转】使用Python学习selenium测试工具

    出处:https://my.oschina.net/u/1433482/blog/633231?fromerr=vaxqh9bn

  2. Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...

  3. Python中的测试工具

      当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试 ...

  4. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台

  5. 基于Python的XSS测试工具XSStrike使用方法

    基于Python的XSS测试工具XSStrike使用方法 简介 XSStrike 是一款用于探测并利用XSS漏洞的脚本 XSStrike目前所提供的产品特性: 对参数进行模糊测试之后构建合适的payl ...

  6. Python学习--Selenium模块简单介绍(1)

    简介及运行流程 Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozi ...

  7. 【python驱动】python进行selenium测试时GeckoDriver放在什么地方?

    背景:用python进行selenium 关于b/s架构的测试,需要配置驱动否则程序无法执行 情况1:windows下放置GeckoDriver 步骤1:下载驱动 GeckoDriver下载地址fir ...

  8. python:selenium测试登录在chrome中闪退

    问题描述:使用selenium.webdriver时测试网页,进行自动登录测试总是在登录成功时闪退.使用指定驱动器位置的方式chrome也会闪退 1.正常使用chrome驱动打开一个网页,正常访问 f ...

  9. selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码

    目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...

随机推荐

  1. OCM_第十天课程:Section5—》数据仓库

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  2. 在vue-cli中引用公共过滤器filter

    在实际项目开发中,在某一组件中声明的全局过滤器Vue.filter并不能在其他组件中使用,所以,我认为只要调用两次以上或者可能会被调用两次以上的过滤器,就应该写入统一个过滤器文件中,方便统一调用.下面 ...

  3. vue修饰符学习

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. python 全栈开发,Day119(Flask初识,Render Redirect HttpResponse,request,模板语言 Jinja2,用户登录例子,内置Session)

    一.Flask初识 首先,要看你学没学过Django 如果学过Django 的同学,请从头看到尾,如果没有学过Django的同学,并且不想学习Django的同学,轻饶过第一部分 三大主流Web框架对比 ...

  5. [转] HTML5应用之文件上传

    HTML5解决了以往网页编写的一个难题:带有上传进度的文件上传. 本文的代码全部来自http://www.matlus.com/html5-file-upload-with-progress/,如在技 ...

  6. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (三)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 19 Canny 边缘检测 目标 • 了解 Canny 边缘检测的概念 • 学习函数 cv2.Canny() 1 ...

  7. 二分搜索-HihoCoder1139

    题目描述: 由于自己“想得太多”,导致自己读了半天题才理解了题意.我还以为索敌值会随着每一次到达战略点而减小,结果题意是索敌值是固定了的,并不会改变. 如下是我对题目中第一个案例的分析: 每个圆圈代表 ...

  8. macos下mongoDB 3.4.5 添加用户、设置权限

    macos下mongoDB 3.4.5 添加用户.设置权限   在项目中需要根据项目运行环境访问,以不同的身份访问各自的db,所以研究了一下MongoDB的 需求: 给MongoDB添加两个用户分别用 ...

  9. pandas学习(创建数据,基本操作)

    pandas学习(一) Pandas基本数据结构 Series类型数据 Dataframe类型 基本操作 Pandas基本数据结构 两种常用数据结构: Series 一维数组,与Numpy中的一维ar ...

  10. NIO的通道和缓冲区

    概述 通道和缓冲区是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们. 通道是对原I/O包中的流的模拟.到任何目的地(或来自任何地方)的所有数据都必须通过一个Channel对象.一个B ...