Python + selenium

                       

1.  所需组建

1.1  Selenium for python

1.2  Python

1.3  Pychram

到 https://pypi.python.org/pypi/selenium#downloads 下载最新版本,当前是3.0.2

下载tar.gz的包

下载完解压:

打开cmd,然后cd到解压包当前路径,输入 python setup.py install

在cmd输入python进入python环境,然后输入 from selenium import webdriver,如果不报错就代表selenium安装成功。

第二个安装selenium方式

还有一种安装方式,在线安装,在cmd输入 python -m pip install selenium,然后回车,自动安装。

pip show selenium 查看版本

    Python+Selenium基础篇之2-打开和关闭谷歌浏览器

下载driver地址https://github.com/mozilla/geckodriver/releases,下载好这个exe文件后,把这个文件放到你的python安装目录下,放在浏览器安装目录下也可以,路径要加到环境变量。例如:C:\Python27\geckdriver.exe。

from selenium import webdriver   # 导入webdriver包
 
driver = webdriver.Firefox()    # 初始化一个火狐浏览器实例:driver
 
driver.maximize_window()        # 最大化浏览器
 
driver.get("https://www.baidu.com")  # 通过get()方法,打开一个url站点
 
driver.quit()     #关闭并退出浏览器
   运行本文下面的代码,有一个前提条件,IE,Chrome,Firefox都是默认安装在C盘,安装的时候不需要去更改安装路径。如果有不是默认安装的,请卸载Firefox,重新下载文件,默认安装到C盘。请相信我,不要浪费时间在,如何启动非默认安装位置下的Firefox浏览器。

1. 如何启动Chrome

from selenium import webdriver
 
driver = webdriver.Chrome()
driver.maximize_window()  # 最大化浏览器
driver.implicitly_wait(8) # 设置隐式时间等待
 
driver.get("https://www.baidu.com")
driver.quit()
2. 如何启动IE

from selenium import webdriver
 
 
driver = webdriver.Ie()
driver.maximize_window()
driver.implicitly_wait(8)
 
driver.get("https://www.baidu.com")
driver.quit()

注意:可能出现的报错


Exception: Message: Unexpected error launching Internet Explorer. Protected Mode settings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones.


解决办法:Internet选项->安全; 把Internet站点,本地Intrant,受信任站点 三个地方的安全界面都设置相同等级,例如都设置中; 再次运行代码就可以用IE打开百度了。

总结:目前,由于IE的不稳定性和速度问题,建议采用火狐或者谷歌浏览器来测试和debug自动化脚本。

开始写自动化脚本之前,我们先学习几个概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本。

      元素,在这个教程系列,我们说的元素之网页元素(web element)。在网页上面的文本输入框,按钮,多选,单选,标签,和文字都叫元素,总之,凡是能在页面显示的对象都可以作为页面元素对象。

      元素定位,有时候也叫Locator,一个HTML页面元素,可以用很多方法去描述这个元素的位置。打个比方,生活中地址,一个大厦,正常的地址是 xx省xx市xx区xx街道xxx号,这个具体描述就是这个大厦的Locator。同样的道理,一个网页元素,也有位置,也可以通过一些手段或者表达式去描述这个元素在页面对应的位置。

      XPath,XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力,XPath 很快的被开发者采用来当作小型查询语言。      Selenium一共有八种元素定位方法,其中,在实际开发自动化脚本过程中,XPath的使用是最多的一种方法,所以本文就介绍如何通过XPath来元素定位。学习了XPath元素定位后,其他7中方法,很容易理解,甚至已经学会了其中好几种方法。
 ———————————————— 

一.XPath工具安装

      为了提高抓取元素XPath的,我推荐在Firefox上安装一个firepath的插件,这个插件,可以帮我们快速获取网页元素的XPath表达式。

1.   打开火狐浏览器,如果没有安装,下载默认安装

2.   点击右上角,菜单-附件组件-扩展

3.   在搜索所有附件组件文本输入框输入:firebug

4.   找到Firebug,点击 安装。重复步骤3和4,搜索和安装FirePath。

5.   安装好了之后,会在火狐浏览器右上角显示一个虫子的图标。

 

二.XPath工具简单使用

我们用定位百度首页的搜索输入框这个元素定位来演示。

1.   打开百度首页

2.   鼠标定位到搜索输入框

3.   右键鼠标,选Inspect in FirePath

4.   打开界面如下图
 ———————————————— 

①FirePath自动推荐该元素的XPath表达式

②该元素节点的详细信息,XPath表达式选取重点区域

③找到一个匹配元素

       一般来说,自动推荐的XPath表达式定位不够精确。我们大部分时候需要去步骤2中,找出能够识别这个唯一元素的节点信息。刚好上面通过id=kw只能找到一个匹配的元素,说明这个XPath可用,看起来也简洁。实际项目中,可能XPath表达式写得很长,或者附近节点信息好多相同,不太好能够快速找到一个唯一的节点信息去定位这个目标元素。接下来,我介绍几种比较实用的XPath定位技巧,基本上能定位到所有的网页元素。


 ———————————————— 

三.XPath定位技巧之text()方法

以百度首页右上角“新闻”定位举例

XPath如下图


四.XPath定位技巧之contains()方法

      有时候,我们不喜欢写很长的XPath表达式,而且节点信息里面,有些信息是动态的,每次都获取都不一样,这个时候contains()方法就很好用。

JD首页左侧电脑菜单举例


XPath写法推荐,这里用contains()方法来定位

这里href = //diannao.jd.com, 如果我觉得这个href太长,我只取关键字diannao,利用contains()方法来定位就方便多了,推荐电脑这个元素的XPath://*/a[contains(@href,'diannao')]


五. 相对XPath路径写法


      有时候,我们遇到目标元素节点的信息很少,不足够用来精确定位到目标元素,这个时候,我们就需要考虑,利用目标元素上下附件节点,通过确定附件的节点从而确定目标元素,这种方式就叫相对路径。

这里用百度新闻首页的一个单选按钮来举例;


火狐浏览器上firepath给出的推荐表达式是:

这里推荐的XPath是根据目标元素节点中id信息来定位的,这个通过id就能定位,当然好。有时候,如果这个id不能作为参考值,我们需要利用相对定位方法来定位这个新闻标题前面的单选按钮;

1)先根据for = newstitle 或者text()=新闻标题来定位“新闻标题”这个标签。

2)根据相对定位来确定“新闻标题”前面的这个radio按钮。

3)XPath的写法是:.//*/label[@for='newstitle']/../input[@id='newstitle']

      由于,当前这个举例不是很符合只能采用相对定位才能确定元素的场景,感觉这个表达式定位,在这里反而更复杂化,但是,相对定位元素方法是一样的,和上面举例的步骤、思维方式是一致的。如果发生了,无法通过目标元素节点信息来定位,那么,就要考虑是否采用相对路径来解决这个问题。元素定位,理论上是没有定位不到的元素,通过以上方法,基本上能定位项目中大部分元素。XPath元素定位就先介绍到这里,以后如果有其他新的好的方法,会添加到这篇文章,接下来,我们开始写一个真正意义上的第一个webui自动化脚本
 ———————————————— 

                                                             第一个完整的自动化测试脚本
# coding=utf-8
import time
from selenium import webdriver
 
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(8)
 
driver.get("https://www.baidu.com")
driver.find_element_by_xpath("//*[@id='kw']").send_keys("selenium")
driver.find_element_by_xpath("//*[@id='su']").click()
 
time.sleep(2)
# 第二个判断方法
ele_string = driver.find_element_by_xpath("//div/h3/a[text()='官网']/../a").text
if (ele_string == u"Selenium - Web Browser Automation"):
    print "测试成功,结果和预期结果匹配!"
driver.quit()

这里只利用 两个等号(==)来判断两个字符串是否完全相同,有时候我们还需要对得到的字符串进行切割操作,才能进行去匹配,以后再介绍字符串切割处理在自动化测试结果判断中的使用。

总结:自动化测试最难的在于如何去写断言,如何判断测试结果是否通过。

                                        验证控件是否被选中

判断元素是否显示在页面(is_displayed()方法),本文我们来学习下,判断一个控件是否被选中状态。

还是以百度新闻举例:

 

# coding=utf-8
import time
from selenium import webdriver
 
 
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("http://news.baidu.com/")
time.sleep(1)
try:
    driver.find_element_by_xpath("//*[@id='news']").is_selected()
    print ('Test Pass.')
except Exception as e:
    print ('Test fail',format(e))

总结:

元素方法is_selected()返回是是布尔值,用来判断单选或者多选控件是否被选中,或者下拉选择菜单是否选择一个默认的option,都可以通过这个方法去判断。

                  Python+Selenium练习篇之-获取页面元素大小

本文介绍如何通过Selenium方法去获取页面元素的大小。这个场景是可能在需要测试的,例如在前端测试过程中,需要去测试某一个控件是否和设计大小保持一致。

这里用百度首页的“百度一下”这个按钮举例,打印出这个按钮的大小。

相关脚本代码如下:

# coding=utf-8
import time
from selenium import webdriver
 
driver = webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://www.baidu.com/")
time.sleep(1)
search_btn = driver.find_element_by_id('su')
print (search_btn.size)

测试结果:

{'width': 100.0, 'height': 36.0}

                                   执行JavaScript

前面文章介绍了ActionChains下的鼠标悬停和右键操作,其实ActionChains还有其他方法,你可以 action = ActionChains,通过这,先初始化一个ActionChains实例对象,然后在action后面输入一个点号,查看支持哪些action方法。本文开始介绍如何执行JS脚本,会用两个例子说明。

示例一,执行js脚本触发一个alert弹出框。相关脚本代码如下:
 ———————————————— 
# coding=utf-8
import time
from selenium import webdriver
 

driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://www.baidu.com")
time.sleep(1)
 
driver.execute_script("window.alert('这是一个alert弹框。');") # 注意这里的分号是英文输入法的分号,不能用中文

 

示例二,执行js脚本来控制浏览器竖向滚动条

打开百度贴吧,然后拖动滚动条到左侧 “地区"

# coding=utf-8
import time
from selenium import webdriver
 
 
driver = webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(6)
driver.get("https://tieba.baidu.com/index.html")
time.sleep(1)
 
target_elem = driver.find_element_by_link_text("地区")
driver.execute_script("return arguments[0].scrollIntoView();",target_elem) # 用目标元素参考去拖动
#driver.execute_script("scroll(0,2400)") # 这个是第二种方法,比较粗劣,大概的拖动

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值