2.自动化测试之python+selenium基础

元素的定位    浏览器控制    鼠标事件      键盘事件    获取验证

设置等待      sleep休眠    定位一组元素   多表单切换  多窗口切换

警告框处理    上传文件      下载文件      cookies操作 javascript调用

截图          关闭窗口      验证码处理

一、元素的定位

1.webdriver提供的8种页面元素定位方法:

    id/name/class name/tag name/link text/partial link text/xpath/css selector

其中python对应的8种方法:

find_element_by_id()                       如: find_element_by_id("kw")

find_element_by_name()                     如: find_element_by_name("wd")

find_element_by_class_name()               如: find_element_by_class_name("s_ipt")

find_element_by_tag_name()                 如: find_element_by_tag_name("input")

find_element_by_link_text()                如:find_element_by_link_text(u"新闻")

find_element_by_partial_link_text()        如:find_element_by_partial_link_text(u"一个很长的")

find_element_by_xpath()                    如: find_element_by_xpath(" .//*[@id=‘kw‘]")

find_element_by_css_selector()             如: find_element_by_css_selector("#kw")

注意:

a.python对中文支持不好,在对于有中文的地方加小写u,作用是把中文字符串转换成unicode编码,如上面link_text(u"新闻")

b.xpath中如果不想指定标签名,也可用(*)代替,

2.xpath定位

2.1 绝对路径定位:find_element_by_xpath("/html/body/div/div[2]/div/form/span/input")

2.2 利用元素属性定位:find_element_by_xpath("//*/input[@id=‘kw‘]")                      //表示当前目录

2.3 层级与属性结合:find_element_by_xpath("//span[@class=‘bg s_pt‘]/input")         /input表示父元素下的子元素

可以用这种方法,一层层网上,直到最外层<html>标签

2.4 使用逻辑运算符:find_element_by_xpath("//input[@id=‘kw‘ and @class=‘su‘]/span/input")

3.css定位        速度快于xpath

css常见语法:

例如:

通过.class定位的:  find_element_by_css_selector(".intr")

通过#id定位的:     find_element_by_css_selector("#firstname")

通过标签名定位的:  find_element_by_css_selector("input")

通过父子关系定位的:find_element_by_css_selector("div>input")

通过属性定位:      find_element_by_css_selector("input[type=‘submit‘]")

组合定位:          find_element_by_css_selector(span.bg s_ipt>input.s_ipt)

//父标签span对应class属性为bg s_ipt的节点下的子标签input且这个子标签class属性为s_ipt

二、浏览器控制

1.控制浏览器大小:set_window_size()    例如:driver.set_window_size(400,500)

maximize_window()    例如:driver.maximize_window()  #无参数

2.浏览器后退、前进:back()-后退、farward()-前进

三、鼠标事件

ActionChains类提供的常用方法:

1.1 perform():执行ActionChains中存储的所有行为,对整个事件进行提交

1.2 context_click():    右击

如:

from selenium.webdriver.common.action_chains import ActionChains

...

ActionChains(dr).context_click(docfile).perform()

1.3 double_click():     双击

如:

from selenium.webdriver.common.action_chains import ActionChains

...

doubleClick=dr.find_element_by_id("xxx")

ActionChains(dr). double_Click(doubleClick).perform()

1.4 drag_and_drop(source,target):    拖动

如:

from selenium.webdriver.common.action_chains import ActionChains

...

dsource=dr.find_element_by_id("xxx")        #拖动的源元素

dtarget=dr.find_element_by_id("xxx")        #释放的目标目标元素

ActionChains(dr).drag_and_drop(dsource,dtarget).perform()

1.5 move_to_element():  鼠标悬停

如:

from selenium.webdriver.common.action_chains import ActionChains

...

above=dr.find_element_by_id("xxx")

ActionChains(dr).move_to_element(above).perform()

四、键盘事件 

1.首先要导入键盘事件的包

  1. from selenium.webdriver.common.keys import Keys
  2. ...
  3. dr.get("http://www.baidu.com")
  4. #输入内容
  5. dr.find_element_by_id("kw").send_keys("seleniumm")
  6. #删除输入内容的最后一个字母,
  7. dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
  8. #输入:空格+教程
  9. dr.find_element_by_id("kw").send_keys(Keys.SPACE)
  10. dr.find_element_by_id("kw").send_keys(u"教程")
  11. #ctrl+a全选输入框内容
  12. dr.find_element_by_id("kw").send_keys(Keys.CONTROL,‘a‘)
  13. #ctrl+x剪贴输入框内容
  14. dr.find_element_by_id("kw").send_keys(Keys.CONTROL,‘x‘)
  15. #ctrl+v剪贴输入框内容
  16. dr.find_element_by_id("kw").send_keys(Keys.CONTROL,‘v‘)
  17. #回车键操作
  18. dr.find_element_by_id("su").send_keys(Keys.ENTER)
  19. dr.close()

常用的键盘操作整理:

send_keys(Keys.BACK_SPACE)  #删除键BackSpace

send_keys(Keys.SPACE)       #空格键Space

send_keys(Keys.TAB)         #制表键Tab

send_keys(Keys.ESCAPE)      #回退键Esc

send_keys(Keys.ENTER)       #回车键Enter

send_keys(Keys.CONTROL,‘a‘) #Ctrl+a

send_keys(Keys.CONTROL,‘c‘) #Ctrl+c

send_keys(Keys.CONTROL,‘x‘) #Ctrl+x

send_keys(Keys.CONTROL,‘v‘) #Ctrl+x

send_keys(Keys.F1)          #F1,类似的有F1-F12

五、获取验证

1.通常用到的验证信息有:title、URL、text

dr.title

dr.current_url

dr.find_element_by_id("xx").text

六、设置等待

1.显示等待:等待某个条件成立时,继续执行,否则达到最大等待时间后抛出异常:TimeoutException,显示等待是针对当前要定位元素使用

WebDriverWait(driver, timeout,poll_frequency,ignored_exceptions=None).until(method,message)

示例:

WebDriverWait(dr,5,0.5,None).until(

expected_conditions.presence_of_element_located((By.ID,"kw1")),message=‘test‘) 

解释:

A.WebDriverWait():在设置时间内,默认间隔一段时间检测一次当前页面元素是否存在,若超过当前指定时间检测不到则抛出异常;

B.driver:webdriver的浏览器驱动,ie、firefox、chromea

C.timeout:最长超时时间,以秒为单位

D.poll_frequency:休眠间隔时间-步长,默认0.5秒

E.ignored_exceptions:超时后异常信息,默认抛出NoSuchElementException异常

F.until(method,message): 调用该方法提供的驱动作为一个参数,直到返回值为True

G.until_not(method,message):调用该方法提供的驱动作为一个参数,直到返回值为False

H.expected_conditions类提供的预期条件实现有:

title_is:判断标题是否是xx

title_contains:判断标题是否包含xx

presence_of_element_located:元素是否存在

visibility_of_element_located:元素是否存在

visibility_of:是否可见

presence_of_all_elements_located:判断一组元素是否存在

text_to_be_present_in_element:判断元素是否有xx文本信息

text_to_be_present_in_element_value:判断元素值是否有xx文本信息

frame_to_be_available_and_switch_to_it:表单是否可见,并切换到该表单

invisibility_of_element_located:判断元素是否隐藏

element_to_be_clickable:判断元素是否点击,它处于可见和启动状态

staleness_of:等到一个元素不再依附于DOM

element_to_be_selected:被选中的元素

element_located_to_be_selected:一个期望的元素位于被选中

element_selection_state_to_be:一个期望检查如果给定元素被选中

element_located_selection_state_to_be:期望找到一个元素并检查是否是选择状态

alert_is_present:预期一个警告信息

2.隐式等待:通过一定的时长等待页面所有元素加载完成,哪个元素超出设置时长没被加载就抛出异常NoSuchElementException,隐式等待是针对所有元素的

implicitly_wait(5)    #默认单位为秒

示例:

dr.implicitly_wait(5)

七、sleep休眠    python中强制的程序等待

from time import sleep

sleep(4)    #默认单位秒,设置小于1秒的时间可以用小数点如sleep(0.6)

八、定位一组元素,类似与1中定位单个元素方法

find_elements_by_id()                     如: find_elements_by_id("kw")

find_elements_by_name()                   如: find_elements_by_name("wd")

find_elements_by_class_name()             如: find_elements_by_class_name("s_ipt")

find_elements_by_tag_name()               如: find_elements_by_tag_name("input")

find_elements_by_link_text()              如:find_elements_by_link_text(u"新闻")

find_elements_by_partial_link_text()      如:find_elements_by_partial_link_text(u"一个很长的")

find_elements_by_xpath()                  如: find_elements_by_xpath(" .//*[@id=‘kw‘]")

find_elements_by_css_selector()           如: find_elements_by_css_selector("#kw")

使用场景:

a.批量操作对象,如选中页面上所有复选框

b.先获取一组对象,再在这组对象里定位需要的的一些对象,如定位所有复选框,然后选择最后一个

例如:代码如下

checkbox.htm页面:

  1. <style type="text/css">
  2. body{font-size:12px; font-family:Tahoma;}
  3. .checkbox{vertical-align:middle; margin-top:0;}
  4. </style>
  5. <body>
  6. <input class="checkbox" type="checkbox" />元旦
  7. <input type="checkbox" name="test" />圣诞节
  8. <input type="checkbox" name="test" />股市
  9. <input type="checkbox" name="test" />阿凡达
  10. <input type="checkbox" name="test" />十月围城
  11. <input type="checkbox" name="test" />水价上调
  12. <input type="button" value="检测" id="btn" />
  13. </body>

python代码:

  1. from selenium import webdriver
  2.     dr=webdriver.Firefox()
  3.     dr.get("D:\\workspace\\pySelenium\\resources\\checkbox.htm")
  4. #使用tagname方式选择页面上所有tagname为input的元素
  5. select_tagname=dr.find_elements_by_tag_name("input")
  6. #使用xpath方式选择页面上所有tagname为input的元素
  7. select_xpath=dr.find_elements_by_xpath("//input[@type=‘checkbox‘]")
  8. #使用css_select方式选择页面上所有tagname为input的元素
  9. select_css=dr.find_elements_by_css_selector(‘input[type=checkbox]‘)
  10. for i in select_tagname:
  11. #循环对每个input元素进行点击选中操作
  12. if i.get_attribute("type")==‘checkbox‘:
  13. i.click()
  14. for j in select_xpath:
  15. #循环对每个input元素进行点击取消操作
  16. j.click()
  17. for k in select_css:
  18. #循环对每个input元素进行点击选中操作
  19. k.click()
  20. #打印出checkbox的个数
  21. print ‘----页面上checkbox的个数为:‘,len(select_css)
  22. #使用pop()获取1组元素的第几个元素
  23. select_css.pop(0).click() #第一个
  24. select_css.pop(1).click() #第二个
  25. select_css.pop().click() #最后一个
  26. select_css.pop(-1).click() #最后一个
  27. select_css.pop(-2).click() #倒数第二个
  28. dr.close()

备注:pop():选择一组元素中的某一个,要注意的是:pop()和pop(-1)都表示最后一个元素

九、多表单切换(对于有frame嵌套表单的操作)

frame页面:

  1. <html>
  2. <body>
  3. <frameset>
  4. <h3>frame</h3>
  5. <iframe id=‘frameid‘ name=‘frameName‘ width="800" height="500" src="http://www.baidu.com"/>
  6. </frameset>
  7. </body>
  8. </html>

python代码:

  1. dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
  2. dr.switch_to_frame("frameid") #通过frame的id进入iframe
  3. #dr.switch_to_frame("frameName") #通过frame的name进入iframe
  4. #下面可以对frame进行操作了
  5. dr.find_element_by_id("kw").send_keys("selenium")
  6. dr.find_element_by_id("su").click()
  7. dr.switch_to_default_content() #退出当前frame返回上一层

备注:1.switch_to_frame()默认直接取表单的id或者name属性来切换

2.完成当前frame表单操作后,可以通过switch_to_default_content()方法返回上一层表单,即离的最近的switch_to_frame()方法

3.对于frame中没有id和name属性的通过下面方式进入frame(定位到frame以页面对象传入)

python代码:

  1. dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
  2.  #定位到frame页面元素
  3.     framepath=dr.find_element_by_class_name("frameClassname")
  4.     dr.switch_to_frame(framepath) #通过frame页面对象进入iframe
  5. #下面可以对frame进行操作了
  6. dr.find_element_by_id("kw").send_keys("selenium")
  7. dr.find_element_by_id("su").click()
  8. dr.switch_to_default_content() #退出当前frame返回上一层

十、多窗口切换

selenium-webdriver中使用switch_to_window()方法来切换任意窗口,常用方法有

driver.current_window_handle    #获取当前窗口句柄

driver.window_handles            #返回所有窗口句柄到当前会话

driver.switch_to_window()       #进入窗口,用于切换不同窗口

python代码:

  1. dr.get("http://www.baidu.com")
  2. current_handle=dr.current_window_handle #获取百度首页窗口句柄
  3. index_login=dr.find_element_by_xpath("//div[@id=‘u1‘]/a[@class=‘lb‘]") #获取登录按钮对象
  4. index_login.click() #点击登录
  5. dr.implicitly_wait(5)
  6. dr.find_element_by_class_name("pass-reglink").click() #点击立即注册按钮
  7. all_handles=dr.window_handles #获取所有打开窗口句柄
  8. for handle in all_handles:
  9. if handle==current_handle:
  10. dr.switch_to_window(handle)
  11. ‘‘‘
  12. ...对首页窗口进行操作
  13. ‘‘‘
  14. print ‘----首页页面title:‘,dr.title
  15. for handle in all_handles:
  16. if handle!=current_handle:
  17. dr.switch_to_window(handle)
  18. ‘‘‘
  19. ...对注册窗口进行操作
  20. ‘‘‘
  21. print ‘----注册页面title:‘,dr.title

十一、警告框处理

webdriver中处理js生成的alert、confirm、prompt处理方法是:使用switch_to_alert()定位到alert/confirm/prompt,然后使用text、accept、dismiss、send_keys来根据需要操作。

text:返回alert、confirm、prompt中的文字信息

accept:点击确认按钮

dismiss:点击取消按钮

send_keys:在alert、confirm有对话框时输入值

python代码:

  1. dr.get("http://www.baidu.com")
  2. set_link=dr.find_element_by_xpath("//div[@id=‘u1‘]/a[@class=‘pf‘]") #找到设置链接元素
  3. ActionChains(dr).move_to_element(set_link).perform() #鼠标移动到设置上
  4. dr.find_element_by_xpath("//a[@class=‘setpref‘]").click() #点击搜索设置链接
  5. time.sleep(3)    #加等待时间 等按钮可用,否则会报错
  6. save_set=dr.find_element_by_css_selector("#gxszButton > a.prefpanelgo")#获取保存设置按钮
  7. save_set.click() #点击保存设置按钮
  8. alert=dr.switch_to_alert()                    #进入alert
  9. print ‘----弹出alert中内容为:‘,alert.text #打印对话框里的文字内容
  10. alert.accept() #对话框里点击alert中确定按钮
  11. #alert.dismiss() #对话框里点击取消按钮
  12. #alert.send_keys("对话框中输入的内容") #在对话框里输入内容

十二、上传文件

分2种:普通上传、插件上传

普通上传:将本地文件的路径作为一个值放到input标签中,通过form表单提交时,将值传给服务器中去

插件上传:指基于flash、javascript或ajax技术实现的上传功能或插件。

1.针对普通上传用send_keys实现

python代码:

  1. dr.get("D:\\workspace\\pySelenium\\resources\\upload.htm")
  2. loadFile=dr.find_element_by_name("filebutton") # 获取上传文件input元素节点
  3. loadFile.send_keys("D:\\workspace\\pySelenium\\resources\\frame.htm") #输入上传文件地址来实现上传

2.插件上传:使用AutoIt实现,--需要安装AutoIt程序

AutoIt安装,使用暂时略,需要时再追加,流程为:用AutoIt编写上传文件脚本生成exe文件,在python脚本中进行调用

python代码:

  1. loadFile=dr.find_element_by_name("filebutton") # 获取上传按钮
  2. loadFile.click()    #点击上传按钮,弹出上传对话框
  3. os.system("D:\\autoItFile.exe")    #调用autoIt生成的exe文件,实现导入

十三、下载文件:使用AutoIt实现,--需要安装AutoIt程序,方法同上传

python代码:

  1. ffp=webdriver.FirefoxProfile()
  2. ffp.set_preference("browser.download.folderList",2) #0:代表下载到浏览器默认路径下;2:下载到指定目录
  3. ffp.set_preference("browser.download.manager.showWhenStarting",False) #是否显示开始:True:显示;False:不显示
  4. ffp.set_preference("browser.download.dir", os.getcwd()) #指定下载文件目录,os.getcwd()无参数,返回当前目录
  5. # ffp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件类型,
  6. #指定下载页面的content-type值,application/octet-stream为文件类型,http-content-type常用对照表搜索百度
  7. dr=webdriver.Firefox(firefox_profile=ffp)
  8. dr.get("https://pypi.python.org/pypi/selenium#downloads")
  9. dr.find_element_by_xpath("//div[@id=‘content‘]/div[3]/table/tbody/tr[3]/td[1]/span/a[1]").click()
  10. #接下来使用autoIt实现

十四、cookies操作

webdriver操作cookies的方法:

get_cookies():获得所有cookies的值

get_cookie(name):获得有特定name值的cookie信息

add_cookie(cookie_dict):添加cookie,必须有name和value

delete_cookie(name):删除特定名称的cookie信息,通过name找到特定的cookie并删除

delete_all_cookies():删除浏览器中所有cookie的信息

注意:1.cookie是以字典形式进行存储的;

2.使用场景:如登录功能会把用户名写入浏览器cookie指定key为username,那么就可以通过get_cookies()找到username,打印value,找不到说明保存浏览器的cookie是有bug的。

python代码:

  1. num=1
  2. dr.get("http://www.baidu.com")
  3. cookies=dr.get_cookies() #获取cookie的所有信息
  4. for ck in cookies:
  5. print ‘----所有cookie‘,num,‘:‘,ck #打印cookie的所有信息
  6. num=num+1
  7. print ‘----按name查cookie:‘,dr.get_cookie("PSTM") #通过cookie的name获取cookie信息
  8. dr.add_cookie({‘name‘:‘hello‘,‘value‘:‘123456789‘}) #向name和value添加会话信息
  9. cookies2=dr.get_cookies() #重新获取cookie的所有信息
  10. for ck2 in cookies2:
  11. if ck2[‘name‘]==‘hello‘:
  12. print "----加入的cookie信息:%s-->%s",(ck2[‘name‘],ck2[‘value‘])

十五、javascript调用,python使用的方法:execute_script()

python代码:

  1. dr.get("http://www.baidu.com")
  2. dr.find_element_by_id("kw").send_keys("selenium")
  3. dr.find_element_by_id("su").click()
  4. js="var q=document.documentElement.scrollTop=1000"    #滚动条滚到最下面
  5. dr.execute_script(js)
  6. time.sleep(4)
  7. js2="var q=document.documentElement.scrollTop=0"      #滚动条滚到页面顶
  8. dr.execute_script(js2)

十六、截图,适用于脚本出错时,对当前窗口进行截图保存,使用函数:get_screenshot_as_file()

python代码:

  1. dr.get("http://www.baidu.com")
  2. try:
  3. dr.find_element_by_id("kw1").send_keys("selenium")
  4. dr.find_element_by_id("su").click()
  5. except NoSuchElementException,msg:
  6. dr.get_screenshot_as_file("d:\\error.jpg")    #截图输出到d盘
  7. print msg
  8. dr.close()

十七、关闭窗口

quit():退出相关驱动程序并关闭所有窗口。

close():关闭当前窗口,打给多个窗口时,可使用来关闭当前窗口

十八、验证码处理

方法1:去掉验证码,问题:如果是在正式环境跑脚本那么在取掉会存在风险

方法2:设置万能验证码,不需要取消验证码,在程序中留后门--设置一个万能验证码,输入万能验证码了就标识通过

python代码:

  1. import random
  2. randnum=random.randint(1000,9999)
  3. print "----生成随机数为:",randnum
  4. input_num=input(u"请输入验证码:")
  5. print "----输入验证码为:",input_num
  6. if input_num==randnum:
  7. print"随机数正确,登录成功"
  8. elif input_num==1234:
  9. print"输入正确,登录成功"
  10. else:
  11. print "登录失败"

方法3:使用cookie方法获取,读取之前登录的cookie值访问时,直接登录,不需要验证码

来自为知笔记(Wiz)

时间: 2024-10-12 08:42:39

2.自动化测试之python+selenium基础的相关文章

自动化测试之Python + selenium = Web UI自动化测试

1.1Python的运行环境 在我决定学习一门新语言Python的时候,Python3已经出来了,目前是Python2与Python3同步维护,Python2拥有大量的类库,但是随着时间的发展,Python3才是以后发展的主流,所以在这里我选择的版本是Python3.安装Python:Python官方网站:https://www.Python.org/ 进入之后选择对应的版本进行下载,Python的下载很简单,下一步的傻瓜式操作就可以了,只是有一点需要注意的是在进到这个界面时(下图)需要勾选上A

Python+Selenium基础篇之5-第一个完整的自动化测试脚本

前面文章,我们介绍了如何采用XPath表达式去定位网页元素,在掌握了如何抓取或者如何书写精确的XPath表达式后,我们可以开始写自己的第一个真正意义上的webui 自动化测试脚本,就相当于,你在学习Python,如何在控制台打印Hello,Python! 一样. 我们的测试用例是:打开百度首页,搜索Selenium,然后检查搜索列表,有没有Selenium这个官网链接选项. 在写自动化脚本之前,需要明确手动脚本的步骤,然后去拆分到具体没一个步骤做什么,考虑好了之后,才开始动手去写脚本.我把这个测

Python+Selenium基础篇之3-打开和关闭IE/Chrome浏览器

前面文章介绍了,如何调用webdriver接口方法来打开和关闭Firefox浏览器,本文介绍如何打开IE和Chrome浏览器.web项目,需要做兼容性测试,最重要的是浏览器兼容性测试.如果只考虑windows平台,相信应该很多公司必须要测试IE.Firefox.Chrome这三大浏览器.所以webui 自动化测试,也需要在这三大浏览器上面运行和测试脚本.从前面文章,我们知道,要调用Firefox浏览器,我们需要下载geckodriver.exe这个文件,放到Python的安装路径下,例如在安装P

自动化测试之python安装

1.首先访问http://www.python.org/download/去下载最新的python版本. 2.安装下载包,一路next. 3.为计算机添加安装目录搭到环境变量,如图把python的安装目录添加到pth系统变量中即可. 4.测试python安装是否成功,cmd打开命令行输入 python 命令,如下图即成功了 5.Hello World! 按照很多资料上写的,输入 print 'Hello World!' 居然是不成功,说语法错误!这是一个坑了,很多资料是都是python 1.*/

Python+Selenium基础篇之4-XPath的使用

开始写自动化脚本之前,我们先学习几个概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本. 元素,在这个教程系列,我们说的元素之网页元素(web element).在网页上面的文本输入框,按钮,多选,单选,标签,和文字都叫元素,总之,凡是能在页面显示的对象都可以作为页面元素对象. 元素定位,有时候也叫Locator,一个HTML页面元素,可以用很多方法去描述这个元素的位置.打个比方,生活中地址,一个大厦,正常的地址是 xx省xx市xx区xx街道xxx号,这个具体描述就是

Android app自动化测试之Python+Appium环境搭建

1.安装JDK (1)JDK安装时会有两次,一次是jdk,第二次是jre. (2)环境变量配置: 添加JAVA_HOME变量, 值:Jdk的安装路径 添加CLASSPATH变量,值: .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar 修改path变量,加上这句 %JAVA_HOME%\bin; (3)命令行输入java命令检测是否安装成功 2.安装ADT (1)网址:http://tools.android-studio.org/index.p

python selenium 基础框架

base_page.py 1 # coding=utf-8 2 import time 3 from selenium.common.exceptions import NoSuchElementException 4 import os.path 5 from unittest3.framework.logger import Logger 6 7 # create a logger instance 8 logger = Logger(logger="BasePage").getl

python+selenium基础之XPATH定位

世界上最远的距离大概就是明明看到一个页面元素矗在那里,但是我却定位不到!! selenium定位元素的方法有很多种,像是通过id.name.class_name.tag_name.link_text等等,但是这些方法局限性太大,拿id属性来说,首先一定不会每个元素都有id属性,其次元素的id属性也不一定是固定不变的.所以这些方法了解一下即可,我们真正需要熟练掌握的是通过xpath和css定位,一般只要掌握一种就可以应对大部分定位工作了. 下面总结一下xpath的定位方法,结合自己练习的实例加深一

Python+Selenium练习篇之1-摘取网页上全部邮箱

前面已经介绍了Python+Selenium基础篇,通过前面几篇文章的介绍和练习,Selenium+Python的webUI自动化测试算是入门了.接下来,我计划写第二个系列:练习篇,通过一些练习,了解和掌握一些Selenium常用的接口或者方法. 练习场景:在某一个网页上有些字段是我们感兴趣的,我们希望摘取出来,进行其他操作.但是这些字段可能在一个网页的不同地方.例如,我们需要在关于百度页面-联系我们,摘取全部的邮箱. 思路拆分: 1. 首先,需要得到当前页面的source内容,就像,打开一个页