自动化测试(3-1):基本API

在学习各种API之前,先了解一下怎么自动打开浏览器,需要下载各个浏览器的驱动,将其放在任意目录下即可,然后执行下面的代码就可以打开各自的浏览器(注意驱动和浏览器的版本)
框架的思想:
-程序和数据的分离
-减少重复代码的编写
-方便进行代码的修改和维护

from selenium import webdriver
打开chrome浏览器
driver = webdriver.Chrome(executable_path="E:\\chromedriver")
打开火狐浏览器
driver = webdriver.Firefox(executable_path="E:\\geckodriver")
打开IE浏览器
driver = webdriver.Ie(executable_path="E:\\IEDriverServer")
IE浏览器设置的缩放必须设定为100%,否则会报下面的错误:
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: Unexpected error launching Internet Explorer. Browser zoom level was set to 150%. It should be set to 100%
IE浏览器设置:Internet选项---》安全---》每一个区域的安全选项要么全部勾选,要么全部不勾选(一共4个区域),否则会报下面的错误:
selenium.common.exceptions.WebDriverException: 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.
  • 通过命令行启动不同浏览器,进行访问指定网址
#例子1:通过命令行启动不同浏览器,进行访问指定网址
from selenium import webdriver
import os
import sys
import time

print(sys.argv)  #打印的是命令行的值,返回的是一个列表
if not len(sys.argv)==3:      #判断命令行参数是不是3个
    print("命令行错误,格式应该是:a.py ie  http://www.baidu.com")
    sys.exit(0)
browser_name = sys.argv[1].strip()
url=sys.argv[2].strip()
print("browser_name = %s, url = %s" %(browser_name,url)) 
if browser_name.lower()=="ie":    
    #启动IE浏览器
    driver = webdriver.Ie(executable_path="E:\\Iedriverserver")
elif browser_name.lower()=="chrome":
    #启动chrome浏览器
    driver = webdriver.Chrome(executable_path="E:\\chromedriver")
else:
    #启动火狐浏览器
    driver = webdriver.Firefox(executable_path="E:\\geckodriver")
#get表示访问某个网址
driver.get(url)
time.sleep(3)
driver.quit()   #退出浏览器
"""如果没有退出ie浏览器,可以使用下面的代码强制进行退出
returnCode = os.system("taskkill /F /iM iexplore.exe")
if returnCode == 0:
    print (u"成功结束IE浏览器进程!")
"""
#执行命令:py -3 a.py ie http://www.baidu.com     py -3 a.py chrome https://www.sohu.com           
  • get访问某个网址、获取title、当前页面的url、获取源码并断言关键字
#例子2:get访问某个网址、获取title、当前页面的url、获取源码并断言关键字
(2-1):get表示只有当前网址全部加载完成,才会往下执行
如果没有加载完成,命令行会不让输入,比较安全
>>> from selenium import webdriver
>>> driver = webdriver.Chrome(executable_path="E:\\chromedriver")
>>> driver.get("http://www.python.org")    #这个国外网站比较慢,可以看下加载的过程
>>> driver.get("http://sohu.com")

(2-2):获取title(如果当前打开了多个标签,可以通过title进行判断)
>>> driver.get("http://iciba.com")
>>> driver.title
'在线翻译_在线词典_金山词霸_爱词霸英语'

(2-3):获取当前页面的url
>>> driver.current_url
'http://www.iciba.com/'

(2-4)获取页面的全部源码(selenium做爬虫,适合这种js比较多的情况;request做爬虫,获取不到这种js)
>>> driver.get("http://iciba.com")
>>> len(driver.page_source)
8375
>>> type(driver.page_source)
<class 'str'>
>>> driver.page_source[:100]
'<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta charset="utf-8" /><m'
获取源码之后,用assert做断言判断关键字
>>> assert "单词" in driver.page_source    #断言成功
>>> assert "不在" in driver.page_source    #断言失败
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError
#下面是一个获取源码并且进行断言的完整例子
#--------------------------------------------------
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动IE浏览器
        self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")

    def test_getPageSource(self):
        url = "http://www.sogou.com"
        # 访问当前网址
        self.driver.get(url)
        # 调用driver的page_source属性获取页面源码
        pageSource = self.driver.page_source
        # 打印页面源码
        print (type(pageSource))
        print (pageSource)
        # 断言页面源码中是否包含“购物”两个关键字,以此判断页面内容是否正确
        self.assertTrue( u"购物" in pageSource)  #使用的是unnittest框架里面的断言

    def tearDown(self):
        # 退出IE浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • 窗口:最大化、获取位置和改变位置、获取大小和改变大小。网页:后退、前进、强制刷新。
#例子3:窗口:最大化、获取位置和改变位置、获取大小和改变大小。网页:后退、前进、强制刷新。
(3-1):窗口最大化
通常打开一个网址之后,窗口并没有最大化,需要立刻把窗口最大化,便于定位元素
>>> driver.maximize_window()

(3-2):获取当前浏览器在屏幕上的位置,返回的是字典
一般分屏显示需要用到这个,用的不多
>>> position = driver.get_window_position()
>>> position
{'x': -8, 'y': -8}
>>> position["x"]
-8
>>> position["y"]
-8

(3-3):改变当前浏览器窗口的位置
注意必须先get获取位置,(2-4)里面已经获取过了
>>> driver.set_window_position(y=200, x=400)
>>> position = driver.get_window_position()
>>> position
{'x': 400, 'y': 200}

(3-4):改变当前浏览器窗口的大小
>>> sizeDict = driver.get_window_size()   #获取当前浏览器窗口的大小
>>> sizeDict
{'width': 1050, 'height': 708}
>>> driver.set_window_size(width = 1382, height = 744, windowHandle='current')   #参数windowHandle表示有焦点的窗口

(3-5):让网页前进、后退、强制刷新
>>> driver.back()     #后退
>>> driver.forward()  #前进
>>> driver.refresh()  #强制刷新
  • 页面窗口(即句柄)的切换(三种切换方式,比较有用:涉及到通过id、xpath等找元素,在输入框中输入内容send_keys和清空内容clear())
#例子4:页面窗口(即句柄)的切换(三种切换方式,比较有用)
#涉及到通过id、xpath等找元素,在输入框中输入内容send_keys和清除内容
"""这个例子实现的内容如下:
1)打开百度,在当前主窗口中的搜索输入框内,输入某个内容A,点击搜索按钮,下方显示B、C等搜索的内容
2)点击B,新打开一个窗口,显示B链接的内容
3)遍历所有的窗口(一共就两个窗口),注意想要在当前窗口做些事情,都要先进行切换到这个窗口
4)第二个窗口的操作是点击HTML5链接
5)主窗口的操作是清除之前搜索的内容,重新输入内容进行搜索
6)最后关闭浏览器
"""

#第一种切换句柄的方式:和主窗口句柄进行对比,判断是不是想要操作的页面
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")

    def test_operateWindowHandle(self):
        url = "https://www.baidu.com"
        # 访问百度的网址
        self.driver.get(url)
        # 获取当前窗口句柄(主窗口)
        now_handle = self.driver.current_window_handle
        # 打印当前获取的窗口句柄
        print (now_handle)
        # 通过id找到百度搜索输入框,并输入"w3cschool"
        self.driver.find_element_by_id("kw").send_keys("w3cschool")
        # 通过id找到搜索按钮,并点击搜索按钮(百度不点击搜索按钮也可以,它是自动搜索的)
        self.driver.find_element_by_id("su").click()
        # 导入time包
        import time
        # 等待3秒,以便网页加载完成
        time.sleep(3)
        # 通过xpath找到w3school在线教程链接,并点击
        self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
        # 等待5秒,以便w3school在线教程网页加载完成
        time.sleep(5)
        # 获取所有窗口句柄,返回的是个列表(这里只有两个窗口)
        all_handles = self.driver.window_handles
        print("所有的窗口:%s" %all_handles)
        
        # 循环遍历所有的窗口句柄
        for handle in all_handles:
            if handle != now_handle:    
                # 切换到当前遍历的窗口
                #self.driver.switch_to.window(handle)
                # 通过link_text找到当前窗口的HTML5链接,并点击
                self.driver.find_element_by_link_text('HTML5').click()
                # 等待3秒,以便HTML链接网页加载完成
                time.sleep(3)
                # 关闭当前的窗口
                self.driver.close()
        time.sleep(3)
        # 打印主窗口句柄
        print (now_handle)
        # 切换到主窗口
        self.driver.switch_to.window(now_handle)
        time.sleep(2)
        # 清空之前输入的内容w3cschool
        self.driver.find_element_by_id("kw").clear()  
        # 通过id找到百度搜索输入框,并输入"北京"
        self.driver.find_element_by_id("kw").send_keys(u"北京")
        # 通过id找到搜索按钮,并点击搜索按钮(百度不点击搜索按钮也可以,它是自动搜索的)
        self.driver.find_element_by_id("su").click()
        time.sleep(5)

    def tearDown(self):
        # 退出chrome浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()


#第二种切换句柄的方式:使用标题title来进行判断是不是想要操作的页面
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")

    def test_operateWindowHandle(self):
        url = "http://www.baidu.com"
        # 访问百度的网址
        self.driver.get(url)
        # 获取当前窗口句柄(主窗口)
        now_handle = self.driver.current_window_handle
        # 打印当前获取的窗口句柄
        print (now_handle)
        # 百度搜索输入框中输入"w3cschool"
        self.driver.find_element_by_id("kw").send_keys("w3cschool")
        # 点击搜索按钮
        self.driver.find_element_by_id("su").click()
        # 导入time包
        import time
        # 等待3秒,以便网页加载完成
        time.sleep(3)
        # 点击w3school在线教程链接
        self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()

        time.sleep(5)
        # 获取所有窗口句柄
        all_handles = self.driver.window_handles
        # 循环遍历所有的窗口句柄
        for handle in all_handles:  
            # 切换到当前遍历的窗口        
            self.driver.switch_to.window(handle)
            print (type(self.driver.title))
            print (self.driver.title)
            if self.driver.title == u"w3school 在线教程":
                # 点击HTML5链接
                self.driver.find_element_by_link_text('HTML5').click()
                time.sleep(3)
            if self.driver.title == u"w3cschool_百度搜索":
               time.sleep(2)
               self.driver.find_element_by_id("kw").clear()
               self.driver.find_element_by_id("kw").send_keys(u"北京")
               self.driver.find_element_by_id("su").click()
               time.sleep(5) 

    def tearDown(self):
        # 退出chrome浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()


#第三种方式:使用源码来进行判断是不是想要操作的页面(和titlie类似)
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")

    def test_operateWindowHandle(self):
        url = "http://www.baidu.com"
        self.driver.get(url)
        # 获取当前窗口句柄
        now_handle = self.driver.current_window_handle
        # 打印当前获取的窗口句柄
        print (now_handle)
        # 百度搜索输入框中输入"selenium"
        self.driver.find_element_by_id("kw").send_keys("w3cschool")
        # 点击搜索按钮
        self.driver.find_element_by_id("su").click()
        # 导入time包
        import time
        # 等待3秒,以便网页加载完成
        time.sleep(3)
        # 点击w3school在线教程链接
        self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()

        time.sleep(5)
        # 获取所有窗口句柄
        all_handles = self.driver.window_handles
        # 循环遍历所有的窗口句柄
        for handle in all_handles:  
            # 切换到当前遍历的窗口        
            self.driver.switch_to.window(handle)
            time.sleep(3)
            if "HTML5" in self.driver.page_source:
                # 点击HTML5链接
                self.driver.find_element_by_link_text('HTML5').click()
                time.sleep(3)
            else:
               time.sleep(2)
               self.driver.find_element_by_id("kw").clear()
               self.driver.find_element_by_id("kw").send_keys(u"北京")
               self.driver.find_element_by_id("su").click()
               time.sleep(5) 

    def tearDown(self):
        # 退出chrome浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • 获取页面的属性
#例子5:获取页面的属性
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Ie(executable_path = "E:\\chromedriver")

    def test_getBasicInfo(self):
        url = "https://www.baidu.com"
        # 访问百度的网址
        self.driver.get(url)
        # 查找百度首页上的"新闻"链接元素
        newsElement = self.driver.find_element_by_xpath("//*[text()='新闻']")
        # 获取查找到的"新闻"链接元素的基本信息
        print (u"元素的标签名:", newsElement.tag_name)
        print (u"元素的size:", newsElement.size)
        print(u"元素的文本:",newsElement.text)
        print(u"元素的链接:",newsElement.get_attribute("href"))   #这两个都是获取链接
        print(u"元素的链接:", newsElement.get_property("href"))

    def tearDown(self):
        # 退出chrome浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • 获取输入框的属性和输入的内容
#例子6:获取输入框的属性和输入的内容
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        
    def test_getWebElementAttribute(self):
        url = "http://www.sogou.com"
        # 访问sogou首页
        self.driver.get(url)
        # 找到搜索输入框元素
        searchBox = self.driver.find_element_by_id("query")
        # 获取搜索输入框页面元素的name属性值
        print (searchBox.get_attribute("name"))
        # 向搜索输入框中输入"测试工程师指定的输入内容"内容
        searchBox.send_keys(u"测试工程师指定的输入内容")
        # 获取页面搜索框的value属性值(即搜索输入框的文字内容)
        print (searchBox.get_attribute("value"))
        time.sleep(3)

    def tearDown(self):
        # 退出chrome浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • 获取css的属性值(用的不多)
#例子7:获取css的属性值
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Chrome(executable_path = "E:\\chromedriver")
        
    def test_getWebElementCssValue(self):
        url = "http://www.baidu.com"
        # 访问baidu首页
        self.driver.get(url)
        # 找到搜索输入框元素
        searchBox = self.driver.find_element_by_id("kw")
        # 使用页面元素对象的value_of_css_property()方法获取元素的CSS属性值
        print (u"搜索输入框的高度是:", searchBox.value_of_css_property("height"))
        print (u"搜索输入框的宽度是:", searchBox.value_of_css_property("width"))
        # 使用页面元素对象的value_of_css_property()方法获取搜索框内文字的字体属性值
        font = searchBox.value_of_css_property("font-family")   
        print (u"搜索输入框的字体是:", font)
        # 断言搜索输入框的字体是否是arial字体
        self.assertEqual(font, "arial")

    def tearDown(self):
        # 退出chrome浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值