博客
关于我
webdriver基础
阅读量:161 次
发布时间:2019-02-28

本文共 7141 字,大约阅读时间需要 23 分钟。

WebDriver基础讲义

WebDriver环境搭建

WebDriver,又称Selenium 2,是一种主流的Web应用自动化测试框架,拥有清晰的面向对象API,能够以最佳方式与浏览器进行交互。支持的浏览器包括Mozilla Firefox、Google Chrome、Microsoft Internet Explorer、Opera、Safari、Apple iPhone、Android浏览器等。

环境搭建步骤

在之前的文章中,我们已经确认使用Python进行WebDriver编码和操作。Python+Selenium WebDriver环境的搭建分为两部分:安装Python和安装Selenium。

安装Python

选择Python版本:主流版本有2.7和3.5(从3.5版本开始,不再支持Windows XP操作系统,Windows XP用户请安装3.4版本)。我们推荐使用未来趋势的3.5版本。

安装Python时,建议选择“Add exe to path”,这样会自动将Python程序添加到环境变量中。安装完成后,运行python -V检测版本。如果使用较旧的Python版本,需要手动安装setuptoolspip工具包。

安装Selenium

安装Selenium的方法有两种:

  • 使用pip命令行安装:运行命令pip install -U seleniumU表示升级)。
  • 从源码安装:下载最新版本的Selenium,解压后使用python setup.py install命令安装。
  • Ubuntu环境搭建

    在Ubuntu下,Python通常已经预装好了。打开终端,输入python -V验证版本。如果没有安装,需要从Python官网下载指定版本的源文件进行源码安装,并设置环境变量。安装Selenium的方法与Windows环境下一致,推荐使用pip命令安装。

    使用IDE编写Python

    在完成环境搭建后,可以使用Python编写自动化脚本程序进行Selenium测试。在选择IDE时,可以参考以下几种工具:

    • IDLE:Python自带的IDE,简单易用。
    • Notepad++:强大的开源编辑器。
    • Vim:Linux系统中最好的编辑器之一。
    • Sublime Text:轻便且功能强大的现代化编辑器。
    • PyCharm:JetBrains公司提供的跨平台PythonIDE。

    Sublime Text 3搭建Python环境

    通过Sublime Text 3安装Python环境:

  • 打开控制台(快捷键Ctrl + Shift + P),输入install package
  • 输入i,匹配到Anaconda插件,安装后可以用Ctrl + B编译和执行Python代码。
  • 开始使用WebDriver

    示例1

    from selenium import webdriver# 创建浏览器对象browser = webdriver.Firefox()# 打开百度网站browser.get('https://www.baidu.com/')

    示例2

    from selenium import webdriverfrom selenium.webdriver.common.keys import Keys# 创建浏览器对象browser = webdriver.Firefox()# 导航到百度主页browser.get('https://www.baidu.com')# 检查标题assert '百度一下,你就知道' in browser.title# 找到名字为wd的元素element = browser.find_element_by_name('wd')# 搜索seleniumhqelement.send_keys('seleniumhq' + Keys.RETURN)# 关闭浏览器browser.quit()

    Selenium 3.0.1出现的问题及解决

    3.0.1更新后,需要做以下两个操作:

  • 将Geckodriver可执行文件添加到系统路径。Geckodriver下载地址:Geckodriver下载
  • 将Firefox安装路径添加到系统路径,并重新启动电脑。
  • 错误提示:WebDriverException:Message:'geckodriver' executable needs to be in Path

    解决方法:

    • 下载并将Geckodriver.exe放置在路径目录中(如C:\python34)。
    • 重启电脑后,确保Firefox已安装。

    XAMPP的安装部署

    XAMPP是Windows操作系统下的开发环境套件,包含Apache、MySQL、PHP、Perl等工具。安装步骤:

  • 双击XAMPP安装文件,按照指引完成安装。
  • 解压网站源文件(如ranzhi.2.5.zip),将文件夹放入xampp\htdocs目录。
  • 访问http://localhost/ranzhi/www完成网站部署。
  • XAMPP问题解决

    • Apache无法启动:关闭IIS、VisualSVN Server等占用80、443端口的程序。
    • MySQL无法启动:终止已有进程,重启MySQL服务。

    使用unittest编写测试脚本

    通过上述示例,我们可以编写简单的Selenium脚本,但为了测试工作,需要使用unittest框架进行“检查”。

    unittest基础

    unittest(最初名为PyUnit)是Python的标准单元测试框架,提供TestCase基类和多种断言方法。使用步骤:

  • 引入unittest模组。
  • 定义测试类,继承unittest.TestCase
  • 测试方法以test_开头。
  • 实例

    import unittestclass DemoTests(unittest.TestCase):    def setUp(self):        self.driver = webdriver.Firefox()        self.driver.implicitly_wait(30)        self.driver.maximize_window()        self.driver.get("https://www.jd.com/")    def test_search_by_category(self):        self.search_field = self.driver.find_element_by_id("key")        self.search_field.clear()        self.search_field.send_keys("iphone 6s plus" + Keys.RETURN)        products = self.driver.find_elements_by_css_selector("li[class='gl-item']")        self.assertEqual(len(products), 24)    def tearDown(self):        self.driver.quit()if __name__ == '__main__':    unittest.main(verbosity=2)

    WebDriver API基本操作

    定位符

    WebDriver提供多种定位方法,包括idnameclass nametaglink textpartial link textxpathcss selector等。

    浏览器控制

    • 最大化浏览器:driver.maximize_window()
    • 设置窗口尺寸:driver.set_window_size(480, 800)
    • 浏览器导航:driver.get(url)
    • 浏览器控制:driver.back()driver.forward()

    综合实例

    import unittestfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditionsclass WebDriverTests(unittest.TestCase):    @classmethod    def setUpClass(cls):        cls.driver = webdriver.Firefox()        cls.driver.get('about:blank')        cls.driver.implicitly_wait(30)        print(" -- set up finished -- ")    def test_01_navigate(self):        urls = [            'https://www.baidu.com/',            'http://pro.demo.zentao.net/user-login-Lw==.html'        ]        for url in urls:            self.driver.get(url)            self.driver.maximize_window()            self.driver.implicitly_wait(30)            if url == 'http://pro.demo.zentao.net/user-login-Lw==.html':                self.driver.find_element_by_id('submit').click()                WebDriverWait(self.driver, 10).until(                    expected_conditions.element_to_be_clickable((By.ID, "submit"))                )            self.driver.implicitly_wait(30)            print(f"-- test 01 finished -- ")    def test_02_element_interaction(self):        self.driver.get('http://pro.demo.zentao.net')        self.account_field = self.driver.find_element_by_name('account')        self.password_field = self.driver.find_element_by_name('password')        self.account_field.clear()        self.password_field.clear()        self.driver.implicitly_wait(30)        self.account_field.send_keys('demo')        self.password_field.send_keys('123456')        self.driver.find_element_by_id('submit').click()        self.driver.implicitly_wait(30)        companyname = self.driver.find_element_by_id('companyname')        self.assertEqual('demo项目管理系统', companyname.text)        print(companyname.get_attribute('type'))        print("-- test 02 finished -- ")    def test_03_element_interation2(self):        js = 'selectTheme("green")'        self.driver.execute_script(js)        self.driver.implicitly_wait(30)        js = 'selectTheme("red")'        self.driver.execute_script(js)        self.driver.implicitly_wait(30)        js = 'selectTheme("lightblue")'        self.driver.execute_script(js)        self.driver.implicitly_wait(30)        js = 'selectTheme("blackberry")'        self.driver.execute_script(js)        self.driver.implicitly_wait(30)        self.driver.find_element_by_id('menuproduct').click()        self.driver.implicitly_wait(30)        self.driver.find_element_by_id('menuproject').click()        self.driver.implicitly_wait(30)        self.driver.find_element_by_id('menuqa').click()        self.driver.implicitly_wait(30)        self.driver.find_element_by_id('menudoc').click()        self.driver.implicitly_wait(30)        self.driver.find_element_by_id('menureport').click()        self.driver.implicitly_wait(30)        self.driver.find_element_by_id('menucompany').click()        self.driver.implicitly_wait(30)        self.driver.find_element_by_link_text('退出').click()        self.driver.implicitly_wait(30)        WebDriverWait(self.driver, 10).until(            expected_conditions.element_to_be_clickable((By.ID, "submit"))        )        print("-- test 03 finished -- ")    def test_04_cookies(self):        self.driver.add_cookie({'name': 'key-neeeeew', 'value': 'value-neeeewwwww'})        for cookie in self.driver.get_cookies():            print(f"{cookie['name']} -> {cookie['value']}")            print()        self.driver.delete_all_cookies()        cookies = self.driver.get_cookies()        print(cookies)        print("-- test 04 finished -- ")    @classmethod    def tearDownClass(cls):        cls.driver.quit()        print("-- tear down finished -- ")if __name__ == '__main__':    unittest.main(verbosity=2)

    作者:立师兄Linty

    链接:https://www.jianshu.com/p/3ce95cbc65be
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    你可能感兴趣的文章
    nginx + etcd 动态负载均衡实践(二)—— 组件安装
    查看>>
    Nginx + uWSGI + Flask + Vhost
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx 动静分离与负载均衡的实现
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    Nginx 反向代理配置去除前缀
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    nginx 常用配置记录
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    Nginx 的 proxy_pass 使用简介
    查看>>
    Nginx 的配置文件中的 keepalive 介绍
    查看>>
    nginx 配置 单页面应用的解决方案
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>