python 穿上 seleniumwebdriver 是多么的性感
#coding = utf-8 from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click()
browser.quit()
脚本解析
# coding = utf-8
可加可不加,开发人员喜欢加一下,防止乱码嘛。
from selenium import webdriver
要想使用 selenium 的 webdriver 里的函数,首先把包导进来嘛
browser = webdriver.Firefox()
我们需要操控哪个浏览器呢?Firefox ,当然也可以换成 Ie 或 Chrome
browser 可以随便取,但后面要用它操纵各种函数执行。
browser.find_element_by_id("kw").send_keys("selenium")
一个控件有若干属性 id 、name、(也可以用其它方式定位),百度输入框的 id 叫 kw , 我要在输入框里输入 selenium 。多自然语言呀!
browser.find_element_by_id("su").click()
搜索的按钮的 id 叫 su ,我需要点一下按钮( click() ) 。
browser.quit()
退出并关闭窗口的每一个相关的驱动程序,有洁癖用这个。
browser.close()
关闭当前窗口 ,用哪个看你的需求了。
元素的定位
对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。 一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身 份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。
那么一个对象也有类似的属性,我们可以通过这个属性找到这对象。
webdriver 提供了一系列的对象定位方法,常用的有以下几种:
·id·name·classname.linktext·partiallinktext·tagname·xpath·css selector
我们可以看到,一个百度的输入框,可以用这么用种方式去定位。
maxlength="100" name="wd"
autocomplete="off">
#coding=utf-8 from selenium import webdriver
browser =webdriver.Firefox()
browser.get("http://www.baidu.com")
#百度输入框的定位方式#
#通过id方式定位
browser.find_element_by_id("kw").send_keys("selenium")
#通过name方式定位
browser.find_element_by_name("wd").send_keys("selenium")
#通过tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")
#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")
#通过CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")
#通过xphan方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
#browser.find_element_by_id("su").click() time.sleep(3) browser.quit()
id 和 name 定位
id 和 name 是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且 在对控件的 id 和 name 命名时一般使其有意义也会取不同的名字。通过这两个属性使我 们找一个页面上的属性变得相当容易
我们通过前端工具,找到了百度输入框的属性信息,如下:
maxlength="100" name="wd" autocomplete="off"> id=”kw” 通过 find_element_by_id("kw") 函数就是捕获到百度输入框 name=”wd” 通过 find_element_by_name("wd")函数同样也可以捕获百度输入框 tagname 和 classname 定位 从上面的百度输入框的属性信息中,我们看到,不单单只有 id 和 name 两个属性, 比如 class 和 tagname(标签名) 就是一个标签的名字,可以通过 find_element_by_tag_name("input")函数来定位。 class="s_ipt" 通过 函数捕获百度输入框。 CSS 定位 CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。 CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策 略。 CSS 的比较灵活可以选择控件的任意属性,上面的例子中: find_element_by_css_selector("#kw") 通过 也可以取 name 属性 driver.find_element_by_css_selector("a[name=\"tj_news\"]").click() 可以取 title 属性 href="http://www.baidu.com/">网页 driver.find_element_by_css_selector("a[title=\"web\"]").click() 也可以是取 driver.find_element_by_css_selector("a.RecycleBin").click() 虽然我也没全部理解 CSS 的定位,但是看上去应该是一种非常灵活和牛 X 的定位方式 XPath 定位 什么是 XPath: selenium 中被误解的 XPath : XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现, 所以 selenium 用户可是使用这种强大语言在 web 应用中定位元素。 XPath 扩展了上面 id 和 name 定位方式,提供了很多种可能性,比如定位页面上的 第三个多选框。 xpath:attributer (属性) driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium") #input 标签下id =kw的元素 xpath:idRelative(id相关性) driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium") #在/form/span/input 层级标签下有个div标签的id=fm的元素 定位它里面的第2个td xpath:position (位置) driver.find_element_by_xpath("//input").send_keys("selenium")driver.find_element_by_xpath("//tr[7]/td[2]").click() #第7个tr 里面的第2个td xpath: href (水平参考) xpath:linkdriver.find_element_by_xpath ("//a[@href='http://www.baidu.com/']").click() #有个叫a的标签,他有个链接 href='http://www.baidu.com/的元素 link 定位 有时候不是一个输入框也不是一个按钮,而是一个文字链接, 我们可以通过 link #coding=utf-8 from selenium import webdriver browser = webdriver.Firefox() browser.get("http://www.baidu.com") 一般一个页面上不会出现相同的文件链接,通过文字链接来定位也是一种简单有效 的定位方式。 Partiallinktext 定位 通过部分链接定位,这个有时候也会用到,我还没有想到很好的用处。拿上面的例 子,我可以只用链接的一部分文字进行匹配: 本系列教程未selenium+Python方向的入门级教程,欢迎大家评论反馈。 西边人细说测试, 头条号(软件测试资源站)作者,程序爬虫获取国内外测试资源分享给自学爱好者。 今日头条关注后,私信回复如下关键词获取大量打包资料下载。 测试资料、工具、Python、自动化测试报告、梯子 等
find_element_by_class_name("s_ipt")
find_element_by_css_selector( )函数,选择取百度输入框的 id 属性来定义
driver.find_element_by_xpath("//tr[@id='check']/td[2]").click() # id为'check' 的tr ,
driver.find_element_by_xpath("//a[contains(text(),'网页')]").click() #在a标签下有个文本(text)包含(contains)'网页' 的元素
browser.find_element_by_link_text("贴 吧").click() browser.quit()
browser.find_element_by_partial_link_text("贴").click() #通过
find_element_by_partial_link_text() 函数,我只用了“贴”字,脚本一样找到了"贴 吧 " 的链接。