使用Python学习selenium测试工具-4:查找元素
转自: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介绍 和
实例
- import unittest
- from selenium import webdriver
- class HomePageTest(unittest.TestCase):
- @classmethod
- def setUpClass(cls):
- # create a new Firefox session
- cls.driver = webdriver.Firefox()
- cls.driver.implicitly_wait(30)
- cls.driver.maximize_window()
- # navigate to the application home page
- cls.driver.get('http://demo-store.seleniumacademy.com/')
- def test_search_text_field_max_length(self):
- # get the search textbox
- search_field = self.driver.find_element_by_id('search')
- # check maxlength attribute is set to 128
- self.assertEqual('128', search_field.get_attribute('maxlength'))
- def test_search_button_enabled(self):
- # get Search button
- search_button = self.driver.find_element_by_class_name('button')
- # check Search button is enabled
- self.assertTrue(search_button.is_enabled())
- def test_my_account_link_is_displayed(self):
- # get the Account link
- account_link = self.driver.find_element_by_link_text('ACCOUNT')
- # check My Account link is displayed/visible in the Home page footer
- self.assertTrue(account_link.is_displayed())
- def test_account_links(self):
- # get the all the links with Account text in it
- account_links = self.driver.\
- find_elements_by_partial_link_text('ACCOUNT')
- # check Account and My Account link is displayed/visible in the Home page footer
- self.assertTrue(len(account_links), 2)
- def test_count_of_promo_banners_images(self):
- # get promo banner list
- banner_list = self.driver.find_element_by_class_name('promos')
- # get images from the banner_list
- banners = banner_list.find_elements_by_tag_name('img')
- # check there are 3 banners displayed on the page
- self.assertEqual(3, len(banners))
- def test_vip_promo(self):
- # get vip promo image
- vip_promo = self.driver.\
- find_element_by_xpath("//img[@alt='Shop Private Sales - Members Only']")
- # check vip promo logo is displayed on home page
- self.assertTrue(vip_promo.is_displayed())
- # click on vip promo images to open the page
- vip_promo.click()
- # check page title
- self.assertEqual("VIP", self.driver.title)
- def test_shopping_cart_status(self):
- # check content of My Shopping Cart block on Home page
- # get the Shopping cart icon and click to open the Shopping Cart section
- shopping_cart_icon = self.driver.\
- find_element_by_css_selector('div.header-minicart span.icon')
- shopping_cart_icon.click()
- # get the shopping cart status
- shopping_cart_status = self.driver.\
- find_element_by_css_selector('p.empty').text
- self.assertEqual('You have no items in your shopping cart.',
- shopping_cart_status)
- # close the shopping cart section
- close_button = self.driver.\
- find_element_by_css_selector('div.minicart-wrapper a.close')
- close_button.click()
- @classmethod
- def tearDownClass(cls):
- # close the browser window
- cls.driver.quit()
- if __name__ == '__main__':
- 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:查找元素的更多相关文章
- 【转】使用Python学习selenium测试工具
出处:https://my.oschina.net/u/1433482/blog/633231?fromerr=vaxqh9bn
- Python学习--Selenium模块学习(2)
Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...
- Python中的测试工具
当我们在写程序的时候,我们需要通过测试来验证程序是否出错或者存在问题,但是,编写大量的测试来确保程序的每个细节都没问题会显得很繁琐.在Python中,我们可以借助一些标准模块来帮助我们自动完成测试 ...
- Python学习--Selenium模块
1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台
- 基于Python的XSS测试工具XSStrike使用方法
基于Python的XSS测试工具XSStrike使用方法 简介 XSStrike 是一款用于探测并利用XSS漏洞的脚本 XSStrike目前所提供的产品特性: 对参数进行模糊测试之后构建合适的payl ...
- Python学习--Selenium模块简单介绍(1)
简介及运行流程 Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozi ...
- 【python驱动】python进行selenium测试时GeckoDriver放在什么地方?
背景:用python进行selenium 关于b/s架构的测试,需要配置驱动否则程序无法执行 情况1:windows下放置GeckoDriver 步骤1:下载驱动 GeckoDriver下载地址fir ...
- python:selenium测试登录在chrome中闪退
问题描述:使用selenium.webdriver时测试网页,进行自动登录测试总是在登录成功时闪退.使用指定驱动器位置的方式chrome也会闪退 1.正常使用chrome驱动打开一个网页,正常访问 f ...
- selenium常用操作,查找元素,操作Cookie,获取截图,获取窗口信息,切换,执行js代码
目录: 1. 常用操作 2. 查找元素 3. 操作Cookie 4. 获取截图 5. 获取窗口信息 6. 切换 7. 执行JS代码 简介 selenium.webdriver.remote.webdr ...
随机推荐
- android 知识点汇总
1.activity 它是 android 应用程序的基本功能单元.一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号.拍照.Activity 本身是没有 ...
- 一次TIME_WAIT和CLOSE_WAIT故障和解决办法
昨天解决了一个curl调用错误导致的服务器异常,具体过程如下: 里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态. 在服务器的日常维护过程中,会经常用到下面的 ...
- jquery幻灯片插件之owl.carousel.js
官网地址:http://owlcarousel2.github.io/OwlCarousel2/ 这个插件兼容各种浏览器,以及移动端 使用方法: 1.下载文件,解压以后,把dist里面的文件放到项目中 ...
- 【必备】史上最全的浏览器 CSS & JS Hack 手册
[必备]史上最全的浏览器 CSS & JS Hack 手册 浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技 ...
- Coursera台大机器学习技法课程笔记07-Blending and Bagging
这一节讲如何将得到的feature或hypothesis组合起来用于预测. 1. 林老师给出了几种方法 在选择g时,需要选择一个很强的g来确保Eval最小,但如果每个g都很弱该怎么办呢 这个时候可以选 ...
- Buffer学习笔记.
前言 JavaScript 对于字符串的操作十分便捷,无论是单字节字符还是宽字节字符,都会认为是一个字符.对字符串的简单操作和DOM操作基本上已经可以满足前端工程需求,但Node很多时候需要处理文件和 ...
- java多线程快速入门(十二)
在静态方法上面加synchonizd用的是字节码文件锁 package com.cppdy; class MyThread8 implements Runnable { private static ...
- hdu4605
两颗线段树,分别维护向左走向右走的情况 线段树的结点维护区间有多少点被路径经过了 离线读入所有询问,dfs遍历树的每一个结点,访问到v时解决对v的所有查询,在dfs过程中只需要维护根节点到v的链,线段 ...
- js 事件对象
/* 事件绑定的格式: 元素节点.on + 事件类型 = function(){ } 元素节点 事件类型 on+事件类型:事件处理函数 [注]上述三者一绑定:生成一个新的事件对象. [注]触发事件以后 ...
- Myeclipse调试模式下自动提示变量值设置
1.Window->Preferences->Java->Editor->Hovers 将[Variable Values]选择即可,如果第一个[Combined Hover] ...