分分pk10网址_《一头扎进》系列之Python+Selenium框架设计篇5

  • 时间:
  • 浏览:1
  • 来源:老云博客 - 专注共享蕊蕊博客资讯

1. 简介

  确实,到前面这人 篇文章,简单的Python+Selenium自动化测试框架就不可能 算实现了。接下来的主什么都有有我介绍,unittest管理脚本,如保如保加载执行脚本,再什么都有有我采用第三方插件,实现输出html的测试报告。本文来介绍下,在同另另一个类中,多个测试函数已经 ,测试固件如保写和进一步实现POM和不可能 遇到大大问题 解决依据。

2. 另另一个类文件多个测试依据状况下测试固件的写法

为了说明这人 大大问题 ,亲戚亲戚让让我们 歌词 在已经 的测试类基础上,再写另另一个test_search2()的测试用例,看看会存在哪此。

2.1 代码实现:

2.2 参考代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-23
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇5- 价值好几K的框架,不看别后悔,过时不候
'''

# 3.导入模块
import time
import unittest
from automation_framework_demo.framework.browser_engine import BrowserEngine
from automation_framework_demo.pageobjects.baidu_homepage import HomePage



class BaiduSearch(unittest.TestCase):
    def setUp(self):
        """
        测试固件的setUp()的代码,主什么都有有我测试的前提准备工作
        :return:
        """
        browse = BrowserEngine(self)
        self.driver = browse.open_browser(self)

    def tearDown(self):
        """
        测试开始英语

后的操作,这里基本上也有关闭浏览器
        :return:
        """
        self.driver.quit()

    def test_baidu_search(self):
        """
        这里一定要test开头,把测试逻辑代码封塞进另另一个test开头的依据里。
        :return:
        """
        homepage = HomePage(self.driver)
        homepage.type_search('selenium')  # 调用页面对象中的依据
        homepage.send_submit_btn()  # 调用页面对象类中的点击搜索按钮依据
        time.sleep(2)
        homepage.get_windows_img()  # 调用基类截图依据
        try:
            assert 'selenium' in homepage.get_page_title()  # 调用页面对象继承基类中的获取页面标题依据
            print('Test Pass.')
        except Exception as e:
            print('Test Fail.', format(e))

    def test_search2(self):
        homepage = HomePage(self.driver)
        homepage.type_search('python')  # 调用页面对象中的依据
        homepage.send_submit_btn()  # 调用页面对象类中的点击搜索按钮依据
        time.sleep(2)
        homepage.get_windows_img()  # 调用基类截图依据


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

2.3 运行结果:

运行代码后,控制台打印如下图的结果

      大大问题 发现了没,亲戚亲戚让让我们 歌词 的浏览器启动和关闭了两次,是也有这人 大大问题 ?确实细心地小伙伴不可能 童鞋们在上一篇文章里就不可能 发现这人 大大问题 了,不可能 时间的关系宏哥在这里把它单独学会英语来分享讲解一下,希望还还能否 加深小伙伴不可能 童鞋们的印象。大大问题 是这麼 每执行一次

test开头的函数,也有执行一次测试固件,也什么都有有我说执行setUp()和()一次,不可能 有N个test开头的函数,测试固件就执行N次,亲戚亲戚让让我们 歌词 到底有这麼,只还还能否 执行一次测试固件,支持执行多次测试函数。

     亲戚亲戚让让我们 歌词 测试中,肯定还还能否 ,打开另另一个页面,或者测试这人 页面的多个用例,才关闭这人 页面,去测试其他页面,在unittest是有相关测试固件依据去支持这人 行为。请看下面调整,其他人对比下,还还能否 找出不同。

2.4 代码实现:

2.5 参考代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-20
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇4- 价值好几K的框架,不看别后悔,过时不候
'''

# 3.导入模块

import time
import unittest
from automation_framework_demo.framework.browser_engine import BrowserEngine
from automation_framework_demo.pageobjects.baidu_homepage import HomePage


class BaiduSearch(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        """
        测试固件的setUp()的代码,主什么都有有我测试的前提准备工作
        :return:
        """
        browse = BrowserEngine(cls)
        cls.driver = browse.open_browser(cls)

    @classmethod
    def tearDownClass(cls):
        """
        测试开始英语

后的操作,这里基本上也有关闭浏览器
        :return:
        """
        cls.driver.quit()

    def test_baidu_search(self):
        """
        这里一定要test开头,把测试逻辑代码封塞进另另一个test开头的依据里。
        :return:
        """
       # self.driver.find_element_by_id('kw').send_keys('selenium')
       # time.sleep(1)
        homepage = HomePage(self.driver)
        homepage.type_search('selenium')  # 调用页面对象中的依据
        time.sleep(12)
        homepage.send_submit_btn()  # 调用页面对象类中的点击搜索按钮依据
        time.sleep(12)
        homepage.get_windows_img()  # 调用基类截图依据
        print(self.driver.title)
        try:
            assert('selenium' in HomePage.get_page_title(self))
            print('Test Pass.')
        except Exception as e:
            print('Test Fail.', format(e))

    def test_search2(self):
        homepage = HomePage(self.driver)
        homepage.type_search('python')  # 调用页面对象中的依据
        homepage.send_submit_btn()  # 调用页面对象类中的点击搜索按钮依据
        time.sleep(2)
        homepage.get_windows_img()  # 调用基类截图依据


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

2.6 运行结果:

运行代码后,控制台打印如下图的结果

运行一下,是也有,只还还能否 打开和关闭浏览器一次,就执行了另另一个搜索用例?已经 ,项目中基本采用这人 依据来执行同另另一个功能不同测试用例的编写。

3. 进一步实现POM

本小节宏哥不可能 进一步演示POM的具体实现,前面POM什么都有有我另另一个页面,另另一个测试脚本,现在亲戚亲戚让让我们 歌词 要实现另另一个页面,另另一个测试脚本。在pageobjects包下,我新建了另另一个页面对象:百度新闻首页,百度体育新闻首页,具体文件行态如下图,其他和已经 项目层级行态保持不变。

 

1. 百度首页页面类代码(baidu_homepage.py),定义了百度新闻的入口

3.1 代码实现:

3.2 参考代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-23
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇5- 价值好几K的框架,不看别后悔,过时不候
'''
# 3.导入模块

from automation_framework_demo.framework.base_page import BasePage

class HomePage(BasePage):
    input_box = "id=>kw"
    search_submit_btn = "xpath=>//*[@id='su']"

    #百度新闻入口
    #news_link = "xpath=>//*[@id='u1']/a[@name='tj_trnews']"
    news_link = "xpath=>//*[@id='u1']/a[@name='tj_trnews']"

    def type_search(self, text):
        self.type(self.input_box, text)

    def send_submit_btn(self):
        self.click(self.search_submit_btn)

    def click_news(self,):
        self.click(self.news_link)
        self.sleep(2)

2. 百度新闻首页的页面类代码(baidu_news_home.py),定义了体育新闻入口

3.3 代码实现:

3.4 参考代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-23
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇5- 价值好几K的框架,不看别后悔,过时不候
'''

# 3.导入模块
from automation_framework_demo.framework.base_page import BasePage

class NewsHomePage(BasePage):
    #点击体育新闻入口
    sports_link = "xpath=>//*[@id='channle-all']/div/ul/li[7]/a"

    def click_sports(self):
        self.click(self.sports_link)
        self.sleep(2)

3. 百度体育新闻页面类代码(news_sports_home.py)

3.5 代码实现:

3.6 参考代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-23
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇5- 价值好几K的框架,不看别后悔,过时不候
'''

# 3.导入模块
from automation_framework_demo.framework.base_page import BasePage

class SportsNewsHomePage(BasePage):
    #NBA入口
    nba_link = "xpath=>.//*[@id='col_focus']/div[1]/div[2]/div/div[2]/div/ul/li[1]/a"

    def click_nba_link(self):
        self.click(self.nba_link)
        self.sleep(2)

4. 测试类代码(test_nba_news_view.py)      

  测试步骤共可是:百度首页点击新闻链接-进入新闻主页,点击体育-进入体育新闻主页,点击NBA-进入NBA页面-其他后续脚本操作。为哪此要采用这麼 的步骤呢,干嘛不直接driver.get('nba的链接')?不可能 亲戚亲戚让让我们 歌词 什么都有有我要利用POM的思想去写亲戚亲戚让让我们 歌词 测试脚本,才有后面 的测试步骤。

4.1 代码实现:

4.2 参考代码:

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-23
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇5- 价值好几K的框架,不看别后悔,过时不候
'''
# 3.导入模块
import time
import unittest
from automation_framework_demo.framework.browser_engine import BrowserEngine
from automation_framework_demo.pageobjects.baidu_homepage import HomePage
from automation_framework_demo.pageobjects.baidu_news_home import NewsHomePage
from automation_framework_demo.pageobjects.news_sport_home import SportsNewsHomePage

class ViewNBANews(unittest.TestCase):
    def setUp(self):
        browse = BrowserEngine(self)
        self.driver = browse.open_browser(self)

    def tearDown(self):
        self.driver.quit()

    def test_view_nba_views(self):
        # 初始化百度首页,并点击新闻链接
        baiduhome = HomePage(self.driver)
        baiduhome.click_news()
        # 初始化另另一个百度新闻主页对象,点击体育
        newshome = NewsHomePage(self.driver)
        newshome.click_sports()
        # 初始化另另一个体育新闻主页,点击NBA
        sportnewhome = SportsNewsHomePage(self.driver)
        sportnewhome.click_nba_link()
        sportnewhome.get_windows_img()

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

4.3 运行结果:

运行代码后,控制台打印如下图的结果

5. 小结

5.1 遇到大大问题

  人品好的小伙伴不可能 童鞋们或许越多遇到下面的大大问题 ,反之则会遇到下面的大大问题 。通已经 面 的脚本,进入另另一个新的页面,就要初始化这人 页面的对象,或者不还还能否 调用这人 页面相关的依据,driver这人 实例对象在不同页面之间切换,这人 什么都有有我POM的核心内容。亲戚亲戚让让我们 歌词 来测试运行这人 类看看,结果报错。

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document

5.2 由于:

字面意思是说,页面元素什么都这麼当前页面对象这麼加载到页面,就非要找到元素,非要进行点击,这人 报错存在在,百度新闻首页点击体育这行代码里。

不可能 亲戚亲戚让让我们 歌词 的driver这人 实例对象在不同的页面里切换,不可能 造成了这人 报错,这人 大大问题 在python+selenium遇到过,java+selenium这麼遇到,国外网站,许多人建议,既然找非要这人 元素,这麼在脚本里,就直接driver.find_elemen(xpath)再找一次。也什么都有有我说,不可能 亲戚亲戚让让我们 歌词

利用页面对象依据,点击不了这人 体育链接,这麼亲戚亲戚让让我们 歌词 直接在脚本里通过find_element依据去定位体育这人 元素,或者再点击。这人 也是是否是另另一个bug,目前暂时这麼更好依据解决,他不知道已经 chromedriver.exe升级会越多解决这人 大大问题 不好说。

亲戚亲戚让让我们 歌词 调整下亲戚亲戚让让我们 歌词 测试类代码,加上find_element()励志的话

5.3 参考代码

# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般中放去第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-12-23
@author: 北京-宏哥   QQ交流群:705269076
Project: 《《一头扎进》系列之Python+Selenium框架设计篇5- 价值好几K的框架,不看别后悔,过时不候
'''
# 3.导入模块
import time
import unittest
from automation_framework_demo.framework.browser_engine import BrowserEngine
from automation_framework_demo.pageobjects.baidu_homepage import HomePage
from automation_framework_demo.pageobjects.baidu_news_home import NewsHomePage
from automation_framework_demo.pageobjects.news_sport_home import SportsNewsHomePage

class ViewNBANews(unittest.TestCase):
    def setUp(self):
        browse = BrowserEngine(self)
        self.driver = browse.open_browser(self)

    def tearDown(self):
        self.driver.quit()

    def test_view_nba_views(self):
        # 初始化百度首页,并点击新闻链接
        baiduhome = HomePage(self.driver)
        # baiduhome.click_news()
        self.driver.find_element_by_xpath("//*[@id='u1']/a[@name='tj_trnews']").click()
        # 初始化另另一个百度新闻主页对象,点击体育
        newshome = NewsHomePage(self.driver)
        # newshome.click_sports()
        self.driver.find_element_by_xpath("//*[@id='channel-all']/div/ul/li[7]/a").click()
        # 初始化另另一个体育新闻主页,点击NBA
        sportnewhome = SportsNewsHomePage(self.driver)
        # sportnewhome.click_nba_link()
        self.driver.find_element_by_xpath(".//*[@id='col_focus']/div[1]/div[2]/div/div[2]/div/ul/li[1]/a").click()
        sportnewhome.get_windows_img()

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

       确实,亲戚亲戚让让我们 歌词 已经 页面对象调用点击相关元素进入下另另一个页面,在回放脚本是看起作用了,或者什么都有有我报错,什么都有有这里,只好在另另一个地方点击进入下另另一个页面的已经 ,采用self.driver.find_element()依据。这人 和亲戚亲戚让让我们 歌词 POM的思想,页面对象只写元素定位和相关依据,脚本类一般不写页面元素定位相矛盾,是吧。是我不好未来能解决这人 大大问题 ,不可能 你接受当前这人 依据,不可能 ,你单独写另另一个进入到NBA的类,类事直接driver.get()或者封装静态类,当做其他NBA页面脚本的测试固件引入,这麼 也还还能否 。

       实际项目脚本开发也应该有其他公共依据封装成模块不可能 静态类,类事,把登录事件写成静态类,第六个用例是收藏一篇文章,收藏的测试前提什么都有有我登录,什么都有有在收藏类的测试固件中的setUp()里就调用登录的模块脚本。同样,你写登录的事件,不可能 封装了浏览器的调用。具体大大问题 要具体分析,实际脚本开发过程要随机应变,一种生活生活依据实现起来困难,就想依据绕过去,这人 是自动化测试工程师要另另总是面临的挑战。

好了,今天的分享就到这里吧!!!谢谢各位的耐心阅读。有大大问题 加群交流讨论

您的肯定什么都有有我我进步的动力。不可能 你感觉还不错,就请鼓励一下吧!记得随手点波  推荐  从不忘记哦!!!

别忘了点 推荐 留下您来过的痕迹