zoukankan      html  css  js  c++  java
  • WebDriver浏览器属性详解(二)

          在WebDriver的测试框架中,WebDriver的类里面提供了很多的方法来专门针对浏览器的操作,这些方法都是在WebDriver

    的类里面,如测试被测试的浏览器地址,获取被测试的浏览器名称。下面针对这部分结合具体的案例实战来说明这些的案例应

    用实战。本文章借鉴了我的书籍《Python自动化测试实战》,具体直播实战课程见腾讯课堂《Selenium3自动化测试实战》

    一、获取测试的地址

           在测试中,由于实际的需求,我们需要获取被测试的地址,比如我说一个很具体的业务场景,验证用户登录一个系统成功

    后,怎么判断该用户是登录成功了呢?那么判断的依据可以分为两种来进行解答,一种是用户登录成功后显示的用户昵称,来

    获取它的文本信息,来验证昵称是否是自己期望的,另外一种方式是获取登录成功后的地址,然后使用endswith()的方法来验证

    是不是以XX地址为结尾作为判断的依据,当然endswith()的方法返回的结果是bool的数据类型,如果是希望的地址,返回的结果

    True,如果不是那么返回的结果就是False。下面就简单的验证下百度的首页地址信息,测试的案例代码如下:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    from selenium  import  webdriver
    
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('http://www.baidu.com')
    assert str(driver.current_url).endswith('baidu.com/')
    driver.quit()

    在如上的过程中,我们使用了Python原生的断言assert,其实Pytest测试框架使用的就是该原生的方法来进行验证结果的信息。

    二、获取当前页面代码

           获取当前页面源码的方式与在浏览器邮件查看源代码获取的信息是一致的,其实很多的时候获取页面的源代码并没有太大的

    意义,但是在网络爬虫里面获取页面的源代码进行下一步的数据分析。当然,在本案例中,只是单纯的获取页面的源代码的部分,

    使用到的方法为page_source,该方法为特性方法,那么何为特性方法了,所谓特性方法可以简单的理解为它是类里面的一个方

    法但是该方法它是属于只读属性,所以所有的特性方法在调用的时候都是没有()的,这点其实很好的理解,如果一个方法有了形

    式参数,那么在这个方法调用的时候必然需要给这个方法的形式参数赋予实际的参数,但是特性方法是调用的时候没有(),那么

    也就无法给形式参数赋值,这点需要特别的注意,特性方法使用到的装饰器为@property。page_source方法实战的具体测试代

    码如下:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    from selenium  import  webdriver
    
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('http://www.baidu.com')
    print(driver.page_source)
    driver.quit()

    三、获取当前的Title

            获取浏览器的title其实很简单的,比如百度的title它就是“百度一下,你就知道”,那么下面针对这部分进行具体的验证,

    案例测试代码如下所示:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    from selenium  import  webdriver
    
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('http://www.baidu.com')
    assert driver.title=='百度一下,你就知道'
    driver.quit()

    四、页面的前进和后退

           页面的前进使用到的方法为forward(),后面的后退使用到的方法为back(),这主要应用于很多的业务场景,比如在第一次打

    开的是百度,后面由于测试的需求,打开的是bing搜索页面,那么可以回退回去,当然也可以再次前进到bing搜索的页面,下面

    具体演示这部分的测试代码,具体如下:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    from selenium  import  webdriver
    import  time as t
    
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('http://www.baidu.com')
    t.sleep(2)
    driver.get('http://www.bing.com')
    #后退
    driver.back()
    print('获取到百度的地址:',driver.current_url)
    driver.forward()
    print('获取到bing的地址:',driver.current_url)
    driver.quit()

    五、多窗口的实战

          先来说一个很简单的场景,在sina的邮箱中,如果需要登录,但是没有账户,那么就需要注册,这个时候就需要点击注册的按

    钮,就会打开一个新的页面到注册的页面,并不会说直接跳转到注册的页面,这个时候由于需要操作注册的页面,就需要实现从

    当前页面切换到另外一个新的页面,那么这个时候就需要使用到多窗口的操作和实战。其实坦白说,多窗口更多值的是两个窗口,

    如果是2个以上的窗口,是很难判断的,因为缺少判断的基准,多窗口的解决步骤可以具体的描述为:

    • 先获取当前窗口句柄
    • 然后点击链接,打开一个新的窗口句柄
    • 然后获取到所有的窗口句柄
    • 循环所有的窗口句柄,判断如果不是当前窗口句柄,那么就切换到新的窗口句柄(如果当前的,就只能是新的窗口了)
    • 切换到新的窗口后,进行操作完成后,然后关闭新的窗口,再切换到当前窗口句柄

    下面就以sina的邮箱为案例来演示这部分,比如注册页面被注册的邮箱为空的错误提示信息,案例测试代码如下:

    #! /usr/bin/env python
    # -*- coding:utf-8 -*-
    #author:无涯
    
    
    from selenium  import  webdriver
    import  time as t
    
    
    driver=webdriver.Chrome()
    driver.maximize_window()
    driver.get('https://mail.sina.com.cn/')
    #获取当前窗口句柄
    nowHandler=driver.current_window_handle
    t.sleep(3)
    driver.find_element_by_link_text('注册').click()
    t.sleep(3)
    #获取所有窗口句柄
    allHandler=driver.window_handles
    #进行循环判断
    for handle in allHandler:
    	#判断不是当前窗口句柄
    	if handle!=nowHandler:
    		#切换到新的窗口
    		driver.switch_to.window(handle)
    		t.sleep(3)
    		driver.find_element_by_link_text('立即注册').click()
    		errorText=driver.find_element_by_xpath('/html/body/div[2]/div/div/div/div/form[1]/div[2]/ul/li[1]/div[3]/p/abbr').text
    		assert errorText=='请输入邮箱名'
    		driver.close()
    #切换到当前窗口
    driver.switch_to.window(nowHandler)
    t.sleep(3)
    driver.quit()

    如上,我们实现了一个浏览器多窗口的完整切换,其实核心的还是它的逻辑顺序这部分理清,后面的相对而言是很好理解的。

         感谢您的阅读,您也可扫描如下二维码参加我的“服务端测试开发实战课程”

    欢迎关注微信公众号“Python自动化测试”
  • 相关阅读:
    (转)Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    (转)[疯狂Java]NIO:Channel的map映射
    AVL 树
    二叉查找树
    IE双击打不开解决办法
    CentOS安装mysql、JDK、Tomcat部署环境
    Tomcat安装与配置
    LoadRunner监控Centos和Ubuntu资源之服务器配置
    Fiddler
    Windows server 2008常用优化设置
  • 原文地址:https://www.cnblogs.com/weke/p/15321475.html
Copyright © 2011-2022 走看看