Exemple #1
0
class ToolBarPanelPage(Base):
    def __init__(self, driver):
        self.base = Base(driver)
        self.home = HomePage(driver)

    # 点击底部工具栏的位置
    def clickToolsPanel(self, element):
        '''
        :param element: 元素名称
        :return:
        '''
        if self.base.elementIsExit(element):
            self.base.clickByElement(element, "工具面板-》{}".format(element))
        else:
            self.base.assertFalse(element)

    # 点击我的图标 ---wmw
    def clickFlymeme(self):
        if self.base.elementIsExit(SET_UP):
            self.base.clickByElement(FLYME_ME, '我的图标')
        else:
            self.assertFalse(SET_UP)

    # 点击设置  --wmw
    def clickSetUp(self):
        if self.base.elementIsExit(SET_UP):
            self.base.clickByElement(SET_UP, "设置")
        else:
            self.assertFalse(SET_UP)

    # 清空历史 —— LJX
    def cleanHistory(self):
        self.home.clickMore()
        self.clickToolsPanel(CLEAN_UP_HISTORY)
        self.clickToolsPanel(CLEAN_UP)
Exemple #2
0
class TestSharePage():
    @pytest.fixture(scope="function")
    def share_init(self):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.more = MorePage(self.driver)
        self.share = SharePage(self.driver)
        self.news = NewsPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.base.unlock()
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.mbackToHomeOrNegative()
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    @allure.story('测试分享网页到便签')
    @pytest.mark.P0
    def test001ShareWebPage(self, share_init):
        '''
        1、进入浏览器,点击导航网站-》安居客
        2、在安居客网页中点击底部-》工具栏图标按钮
        3、点击底部工具栏-》点击分享按钮
        4、点击分享面板-》便签按钮到便签
        5、断言便签应用中是否存在分享的内容
        '''
        self.more.clickDaoHang(HOME_ANJUKE)
        self.home.clickMore()
        self.share.clickWebPageShare()
        self.share.clickNotes()
        self.base.assertTrue(SHARE_TEXTTITLE)

    @allure.story('测试分享资讯文章到便签')
    @pytest.mark.P0
    def test002ShareNewsPage(self, share_init):
        '''
        1、进入浏览器,点击"资讯"按钮
        2、在资讯流列表点击“倒三角”,进入频道管理页面
        3、打开“健康”频道
        4、打开资讯文章详情页
        5、点击分享按钮
        6、点击分享面板-》便签按钮到便签
        7、断言便签应用中是否存在分享的内容
        8、点击mback返回资讯流列表
        9、断言资讯流列表“资讯”按钮存在
        '''
        self.home.clickInformation()
        self.news.clickNewsTriangle()
        self.news.clickNewsChannel(NEWS_CHANNEL_HEALTH)
        self.news.clickOpenNewsArticle()
        self.base.assertTrue(NEWS_PAGE_MOREMENU)
        self.share.clickNewsArticleShare()
        self.share.clickNotes()
        self.base.assertTrue(SHARE_TEXT)
 def readPage_init(self):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.read = ReadPage(self.driver)
     self.searchpanel = SearchPanelPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.pubmethod.clearApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     yield
     logging.info("****用例执行结束****")
     logging.info("")
Exemple #4
0
 def search_init(self):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.searchpanel = SearchPanelPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.home.clickHome()
     self.home.clickHomeOnPage(HOME_PAGE)
     self.pubmethod.mbackToHomeOrNegative()
     yield
     logging.info("****用例执行结束****")
     logging.info("")
 def personalCenter_init(self):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod= PubMethod(self.driver)
     self.toolbarpanel = ToolBarPanelPage(self.driver)
     self.personalcenter = PersonalCenterPage(self.driver)
     self.news = NewsPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.mbackToHomeOrNegative()
     yield
     logging.info("****用例执行结束****")
     logging.info("")
 def news_init(self, scope="function"):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.more = MorePage(self.driver)
     self.news = NewsPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.base.unlock()
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.mbackToHomeOrNegative()
     yield
     logging.info("****用例执行结束****")
     logging.info("")
Exemple #7
0
 def quit_init(self, scope="function"):
     self.base = Base(self.driver)
     self.more = MorePage(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.windowstab = WindowsTabPage(self.driver)
     self.quit = ToolBarPanelPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.base.unlock()
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.home.clickHome()
     self.home.clickHomeOnPage(HOME_PAGE)
     yield
     logging.info("****用例执行结束****")
     logging.info("")
 def setUp_init(self):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.searchpanel = SearchPanelPage(self.driver)
     self.toolbarpanel = ToolBarPanelPage(self.driver)
     self.setup = SetUpPage(self.driver)
     self.news = NewsPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.base.browserWatcher()
     self.home.clickHome()
     self.home.clickHomeOnPage(HOME_PAGE)
     yield
     logging.info("****用例执行结束****")
     logging.info("")
Exemple #9
0
 def collectionAndHistory_init(self):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.negativescreen = NegativeScreenPage(self.driver)
     self.addtohome = AddToHomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.searchpanel = SearchPanelPage(self.driver)
     self.toolbarpanel = ToolBarPanelPage(self.driver)
     self.collectionandhistory = CollectionAndHistoryPage(self.driver)
     self.news = NewsPage(self.driver)
     self.windowstab = WindowsTabPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.mbackToHomeOrNegative()
     yield
     logging.info("****用例执行结束****")
     logging.info("")
 def down_init(self, scope="function"):
     self.base = Base(self.driver)
     self.home = HomePage(self.driver)
     self.pubmethod = PubMethod(self.driver)
     self.more = MorePage(self.driver)
     self.search = SearchPanelPage(self.driver)
     self.tool = ToolBarPanelPage(self.driver)
     self.set = SetUpPage(self.driver)
     self.down = DownPage(self.driver)
     logging.info("")
     logging.info("****开始执行用例****")
     self.base.unlock()
     self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
     self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
     self.home.clickHome()
     self.home.clickHomeOnPage(HOME_PAGE)
     yield
     logging.info("****用例执行结束****")
     logging.info("")
class TestNewsPage():
    @pytest.fixture()
    def news_init(self, scope="function"):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.more = MorePage(self.driver)
        self.news = NewsPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.base.unlock()
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.mbackToHomeOrNegative()
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    @allure.story('测试下拉刷新、上滑刷新、点击资讯按钮刷新、点击提示语刷新资讯流列表,更新资讯内容')
    def test001RefreshNews(self, news_init):
        '''
        1、打开浏览器,在首页点击“资讯”按钮进入资讯流列表
        2、获取资讯流列表的文章标题
        3、下拉刷新资讯流列表内容,再次获取资讯流列表的文章标题
        4、断言刷新前和刷新后的文章标题不一样
        5、滑动页面找到'上次看到这里,点击刷新'提示语,点击提示语,刷新资讯流内容
        6、断言刷新前和刷新后的文章标题不一样
        7、上滑刷新,刷新新的资讯文章
        8、断言刷新前的文章内容标题不存在
        '''
        self.home.clickHome()
        self.home.clickHomeOnPage(HOME_PAGE)
        self.home.clickInformation()
        beforeArticleTitle = self.news.getNewsArticleTitle()
        self.news.dropScrollNews()
        sleep(2)
        afterArticleTitle = self.news.getNewsArticleTitle()
        self.base.assertEqual(beforeArticleTitle, afterArticleTitle, False)
        self.news.scrollUpNewsToElement()
        self.news.clickNewsRefreshNotice()
        sleep(2)
        afterRefreshArticleTitle = self.news.getNewsArticleTitle()
        self.base.assertEqual(afterArticleTitle, afterRefreshArticleTitle,
                              False)
        self.news.scrollUpNews(2)
        afterToArticleTitle = self.news.getNewsArticleTitle()
        self.base.assertEqual(afterRefreshArticleTitle, afterToArticleTitle,
                              False)

    @allure.story('测试美女频道,打开标签列表、打开图片详情')
    def test002NewsBeautyGrilChannel(self, news_init):
        '''
        1、打开浏览器,在首页向上滑动进入资讯流列表
        2、点击资讯流列表的三角符号,进入频道管理页面
        3、点击“美女”,进入“美女”频道列表
        4、断言“美女图集”存在,则打开美女频道正常
        5、再点击打开“女神”标签,进入标签列表页中
        6、断言“女神”标签中“图集详情的内容ID”存在
        7、点击mback返回美女列表页
        8、滑动页面,选择美女图片打开进入美女图片详情
        9、断言图片详情页顶部返回按钮存在
        '''
        self.home.clickInformation()
        self.news.clickNewsTriangle()
        self.news.clickNewsChannel(NEWS_CHANNEL_BEAUTY_GIRL)
        self.base.assertTrue(NEWS_BEAUTY_GIRL_ATLAS)
        self.news.clickBeautyGirlLable(NEWS_BEAUTY_GIRL_LABEL)
        self.base.assertTrue(NEWS_BEAUTY_GIRL_GODDESS)
        self.pubmethod.clickBack()
        self.news.scrollUpNews(1)
        self.news.clickBeautyGirlList()
        self.base.assertTrue(NEWS_BEAUTY_GIRL_BACK)

    @allure.story('测试频道管理页面,新增、删除、长按、点击打开频道跳转正常等操作')
    def test003NewsChannelManage(self, news_init):
        '''
        1、打开浏览器,上滑进入资讯流列表
        2、点击倒三角符号,进入频道管理页面
        3、在我的频道管理页面,长按“头条”
        4、删除“视频、军事”频道
        5、点击“完成”按钮
        6、再添加“视频、军事”频道
        7、点击“视频”频道,进入资讯流列表
        8、断言视频频道列表中的负反馈按钮存在
        '''

        self.pubmethod.clearApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.clickPrivacyAgree()
        self.pubmethod.clickPermissionAgree()
        self.base.browserWatcher()
        sleep(4)
        self.home.clickInformation()
        self.news.clickNewsTriangle()
        self.news.longPressNewsChannel(NEWS_CHANNEL_TOUTIAO)
        self.news.clickDeleteNewsChannel(NEWS_CHANNEL_DELETE, 2)
        self.news.clickFinishButton()
        self.news.addNewsChannel(NEWS_CHANNEL_VIDEO)
        self.news.addNewsChannel(NEWS_CHANNEL_MILITARY)
        self.news.clickNewsChannel(NEWS_CHANNEL_VIDEO)
        self.base.assertTrue(NEWS_VIDEO_NO_INTERESTED)

    @allure.story('测试资讯流列表中的不感兴趣功能')
    def test004NewsChannelManage(self, news_init):
        """
        1、打开浏览器,上滑进入资讯流列表页面
        2、获取资讯流列表第一个标题
        3、点击“X”按钮,显示不感兴趣弹框
        4、点击“不感兴趣”,删除文章
        5、断言删除前和删除后的文章标题不相等
        """
        self.home.clickInformation()
        beforeArticleTitle = self.news.getNewsArticleTitle()
        self.news.clickDeleteNewsChannel(NEWS_ARTICLE_DELETE, 1)
        self.news.clickDeleteNewsChannel(NEWS_DISLIKE, 1)
        afterArticleTitle = self.news.getNewsArticleTitle()
        self.base.assertEqual(beforeArticleTitle, afterArticleTitle, False)

    @allure.story('测试下拉刷新资讯流列表,更新资讯内容,打开任意文章,文章加载正常')
    def test005RefreshNewsOpenArticle(self, news_init):
        '''
        1、打开浏览器,在首页点击“资讯”按钮进入资讯流列表
        2、点击“倒三角”进入频道管理页面
        3、点击“健康”频道打开,进入资讯流列表
        4、下拉刷新资讯流列表内容
        4、获取列表中的文章标题文字信息
        5、点击打开资讯流列表的资讯文章详情
        6、根据百度文字识别 API 识别并获取图片中文字
        7、断言文章标题和文章详情页的文字的匹配度
        '''
        self.home.clickInformation()
        self.news.clickNewsTriangle()
        self.news.clickNewsChannel(NEWS_CHANNEL_HEALTH)
        self.news.clickOpenNewsArticle()
        self.pubmethod.clickBack()
        self.news.dropScrollNews()
        beforetitle = self.news.getNewsArticleTitle()
        self.news.clickOpenNewsArticle()
        aftertitle = self.pubmethod.getBaiduApiText(NEWS_PAGE_MOREMENU)
        self.base.assertEqual(beforetitle, aftertitle, True)

    #  ---wmw
    @allure.story('测试资讯广告')
    def test006NewsAdvertisement(self, news_init):
        '''
        1、点击资讯按钮进入资讯流列表,并刷新资讯
        2、上滑页面,点击X按钮,删除广告,并断言是否存在
        '''
        self.pubmethod.clearApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.clickPrivacyAgree()
        self.pubmethod.clickPermissionAgree()
        self.base.browserWatcher()
        sleep(4)
        # 点击资讯按钮进入资讯流列表
        self.home.clickInformation()
        # 点击“倒三角”进入频道管理页面
        self.news.clickNewsTriangle()
        # 点击“视频”频道打开,进入资讯流列表
        self.news.clickNewsChannel(NEWS_CHANNEL_VIDEO)
        # 上滑页面
        self.news.SlideUp()
        sleep(2)
        # 点击 X 按钮,删除广告
        self.news.clickNewsAdvertisementDelete()
        # 点击不感兴趣
        self.news.clickNewsAdvertisementUninterested()
        sleep(4)
        # 断言页面是否存在广告
        self.base.assertTrue(NEWS_ADVERTISEMENT, False)
Exemple #12
0
class TestWindowsTabPage():
    @pytest.fixture()
    def window_init(self, scope="function"):
        self.base = Base(self.driver)
        self.more = MorePage(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.windowstab = WindowsTabPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.base.unlock()
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.mbackToHomeOrNegative()
        self.home.clickHome()
        self.home.clickHomeOnPage(HOME_PAGE)
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    # 新建多窗口且浏览多窗口内容,打开多窗口页面  ——LCM
    @allure.story('测试新建多窗口且浏览多窗口内容')
    def test001NewWindowsTab(self, window_init):
        '''
        1、进入浏览器,点击导航网站-》更多
        2、点击多窗口按钮
        3、点击新建多窗口按钮(新建3个多窗口tab)
        4、滑动浏览多窗口tab页
        5、断言首页导航网站-》更多 -》搜索框中的默认关键字:输入关键字
        6、点击多窗口中tab页进入网页浏览
        7、断言多窗口数量不相等
        '''
        self.more.clickDaoHang(HOME_BUSINESS_MORE_TEXT)
        winNumBefore = self.windowstab.getWindowsNum()
        self.windowstab.clickWindowsTab()
        self.windowstab.newWindowsTab(2)
        self.windowstab.scrollToWindowsTab()
        self.windowstab.openWindowsTabPage()
        self.base.assertTrue(DEFAULT_WORD)
        NumAfter = self.windowstab.getWindowsNum()
        self.base.assertEqual(winNumBefore, NumAfter, False)

    # 关闭所有的多窗口  ——LCM
    @allure.story('测试多窗口浏览tab页关闭所有的多窗口')
    def test002CloseAllWindowsTab(self, window_init):
        '''
        1、进入浏览器,点击导航网站-》更多
        2、点击多窗口按钮
        3、点击新建多窗口按钮,点击打开导航网站-》更多,新建3个多窗口
        4、关闭所有的多窗口
        5、断言多窗口数量为:1
        '''
        self.more.clickDaoHang(HOME_BUSINESS_MORE_TEXT)
        self.windowstab.clickWindowsTab()
        self.windowstab.newWindowsTab(2)
        # 获取新建的多窗口数量
        winNumBefore = self.windowstab.getWindowsNum()
        self.windowstab.closeAllWindowsTab()
        # 获取删除多窗口后的数量
        NumAfter = self.windowstab.getWindowsNum()
        # 断言多窗口数量为:1
        self.base.assertEqual(winNumBefore, NumAfter, False)

    # 多窗口浏览tab页上滑关闭多窗口  ——LCM
    @allure.story('测试多窗口浏览tab页上滑关闭一个多窗口')
    def test003CloseOneWindowsTab(self, window_init):
        '''
        1、进入浏览器,点击导航网站-》更多
        2、点击多窗口按钮
        3、点击新建多窗口按钮,点击打开导航网站-》更多,重复新建3个多窗口
        4、获取新建的多窗口数量
        5、上滑关闭2个多窗口
        6、获取删除多窗口后的数量
        7、断言多窗口数量是否减少
        '''
        self.more.clickDaoHang(HOME_BUSINESS_MORE_TEXT)
        self.windowstab.clickWindowsTab()
        self.windowstab.newWindowsTab(2)
        winNumBefore = self.windowstab.getWindowsNum()
        self.windowstab.closeOneWindowsTab()
        self.windowstab.openWindowsTabPage()
        NumAfter = self.windowstab.getWindowsNum()
        # 断言新建多窗口时的数量和删除多窗口后的数量
        self.base.assertEqual(winNumBefore, NumAfter, False)

    # 长按menu_more按钮,关闭多窗口  ——LCM
    @allure.story('测试长按menu_more按钮,点击“X”关闭多窗口')
    def test004LongPressCloseWindowsTab(self, window_init):
        '''
        1、进入浏览器,点击导航网站-》更多
        2、点击多窗口按钮
        3、点击新建多窗口按钮,点击打开导航网站-》更多,重复新建3个多窗口
        4、点击多窗口中tab页进入网页浏览
        5、获取新建的多窗口数量
        6、长按并且上滑到 “X” 位置后放开,关闭当前窗口
        7、获取删除多窗口后的数量
        8、断言多窗口数量是否减少
        '''
        self.more.clickDaoHang(HOME_BUSINESS_MORE_TEXT)
        self.windowstab.clickWindowsTab()
        self.windowstab.newWindowsTab(2)
        self.windowstab.openWindowsTabPage()
        winNumBefore = self.windowstab.getWindowsNum()
        # 点击长按menu_more按钮后,上滑到显示的“X”按钮,放开删除当前窗口
        self.windowstab.longPressCloseWindowsTab()
        NumAfter = self.windowstab.getWindowsNum()
        # 断言新建多窗口时的数量和删除多窗口后的数量
        self.base.assertEqual(winNumBefore, NumAfter, False)
class TestPersonalCenterPage():

    @pytest.fixture(scope="function")
    def personalCenter_init(self):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod= PubMethod(self.driver)
        self.toolbarpanel = ToolBarPanelPage(self.driver)
        self.personalcenter = PersonalCenterPage(self.driver)
        self.news = NewsPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.mbackToHomeOrNegative()
        yield
        logging.info("****用例执行结束****")
        logging.info("")


    # ---wmw
    @allure.story('测试个人中心账号登录页')
    def test001PersonalCenterPage(self, personalCenter_init):
        '''
        1、点击工具菜单
        2、点击工具面板--我的图标
        3、未登录时,点击我的图标
        4、断言页面是否为登录账号页面
        '''
        self.home.clickMore()
        self.toolbarpanel.clickFlymeme()
        self.personalcenter.clickFlymemeB()
        self.base.assertTrue(PERSONAL_CENTER_REGISTER)

    # ---wmw
    @allure.story('测试个人中心账号,进入评论详情,检查页面显示是否正常')
    def test002PersonalCenterPage(self, personalCenter_init):
        '''
        1、点击工具菜单
        2、点击工具面板--我的图标
        3、判断账号是否登陆
        4、点击我的消息
        5、默认点击第一条消息
        '''
        self.home.clickMore()
        self.toolbarpanel.clickFlymeme()
        self.personalcenter.elementIsLandFlymeme()
        self.personalcenter.clickMyMessages()
        self.personalcenter.clickPraisedMyMessages()
        afterMessagesTxt = self.pubmethod.getBaiduApiText(PERSONAL_CENTER_COMMENT_DETAILS)
        self.personalcenter.clickCommentary()
        beforeMessagesTxt = self.pubmethod.getBaiduApiText(NEWS_PAGE_MOREMENU)
        self.base.assertEqual(afterMessagesTxt, beforeMessagesTxt, True)

    @allure.story('测试个人中心账号,进入评论详情,检查页面显示是否正常')
    def test003PersonalCenterPage(self, personalCenter_init):
        '''
        1、点击工具菜单
        2、点击工具面板--我的图标
        3、判断账号是否登陆
        4、点击我的评论
        5、默认点击第一条消息
        '''
        self.home.clickMore()
        self.toolbarpanel.clickFlymeme()
        self.personalcenter.elementIsLandFlymeme()
        self.personalcenter.clickMyComment()
        afterCommentTxt = self.pubmethod.getBaiduApiText(PERSONAL_CENTER_MY_COMMENT_A)
        self.personalcenter.clickPraisedMyComment()
        beforeCommentTxt = self.pubmethod.getBaiduApiText(NEWS_PAGE_MOREMENU)
        self.base.assertEqual(afterCommentTxt, beforeCommentTxt, True)

    @allure.story('测试小游戏是否正常打开')
    def test004PersonalCenterPage(self,personalCenter_init):
        '''
        1、点击工具栏面板头像图标,进入个人中心
        2、点击小游戏
        '''
        self.home.clickMore()
        self.toolbarpanel.clickFlymeme()
        self.personalcenter.clickMiniGame()
        self.base.browserWatcher()
        self.pubmethod.clearApp(HOT_GAME)


    @allure.story('测试资讯文章评论是否提交正常')
    def test005RefreshNewsOpenArticle(self,personalCenter_init):
        '''
        1、清除浏览器数据,进入军事频道
        2、点击第一篇文章进入文章详情页,点击评论输入内容
        3、断言页面是否存在输入内容
        4、在个人中心评论页面删除之前输入的测试评论内容,断言测试评论不存在
        '''
        self.pubmethod.clearApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        # 清除数据后首次进入浏览器,点击隐私弹窗同意按钮
        self.pubmethod.clickPrivacyAgree()
        # 点击权限弹窗“始终允许”按钮,进入浏览器
        # self.pubmethod.clickPermissionAgree()
        self.base.browserWatcher()
        sleep(5)
        self.home.clickInformation()
        # 点击“倒三角”进入频道管理页面
        self.news.clickNewsTriangle()
        sleep(2)
        # 点击“星座”频道打开,进入资讯流列表
        self.news.clickNewsChannel(NEWS_CHANNEL_CONSTELLATION)

        self.news.dropScrollNews()
        self.news.clickOpenNewsArticle()
        self.base.scrollToElement(NEWS_ALL_COMMENTS)
        self.news.clickCommentBox()
        self.news.inputFocalPositionText()
        self.news.clickRelease()
        self.base.assertTrue(NEWS_INPUT_COMMENTS)
        sleep(4)
        # 点击mback
        self.pubmethod.clickBack()
        self.home.clickMore()
        self.toolbarpanel.clickFlymeme()
        self.personalcenter.clickMyComment()
        self.personalcenter.clickDelete()
        self.personalcenter.clickDeleteBox()
        self.pubmethod.clickBack()
        self.personalcenter.clickMyComment()
        self.base.assertTrue(NEWS_INPUT_COMMENTS, False)


    @allure.story('测试修改输入法')
    def test006PersonalCenterPage(self, personalCenter_init):
        '''
            1、修改输入法
        '''
        # 点击mback
        self.pubmethod.clickBack()
        self.pubmethod.startApp(MEIZU_SETTINGS)
        self.base.scrollToElement(LANGUAGE_AND_TIME)
        sleep(5)
        self.personalcenter.clickLanguageAndTime()
        self.personalcenter.clickInputMethod()
        self.personalcenter.clickSettingButton()
        self.personalcenter.clickSouGou()
        self.base.assertTrue(INPUT_BABIT)


    @allure.story('测试退出账号')
    def test007PersonalCenterPage(self, personalCenter_init):
        '''
            1、退出Flyme账号
        '''
        self.home.clickMore()
        self.toolbarpanel.clickFlymeme()
        self.personalcenter.clickOutAccount()
        self.base.assertTrue(PERSONAL_CENTER_NOT_LOGGED_IN)
Exemple #14
0
 def __init__(self, driver):
     self.base = Base(driver)
     self.home = HomePage(driver)
class TestReadPage():

    @pytest.fixture(scope="function")
    def readPage_init(self):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.read = ReadPage(self.driver)
        self.searchpanel = SearchPanelPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.pubmethod.clearApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    @allure.story('测试阅读模式')
    def test001ReadPage(self, readPage_init):
        '''

        1、清空浏览器数据,点击电脑版进入小说网页
        2、点击小说封面,开始阅读,进入章节,判断是否首次弹出阅读模式弹框
        3、点击地址栏的阅读模式按钮,判断是否正常进入/退出阅读模式

        '''
        self.pubmethod.clearApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.clickPrivacyAgree()
        # self.pubmethod.clickPermissionAgree()
        sleep(4)
        self.base.browserWatcher()
        # 点击主页工具菜单
        self.home.clickMore()
        # 点击电脑版
        self.read.clickComputerButton()
        # 点击首页搜索框
        self.home.clickHomeSearch()
        # 搜索框输入m.80txt.la
        self.searchpanel.inputNumber()
        # 点击搜索
        self.searchpanel.clickSearchInto()
        # 点击小说封面
        self.read.clickBook()
        # 点击开始阅读
        self.read.clickRead()
        # 点击章节
        self.read.clickChapter()
        # 断言是否会弹出阅读模式提示框
        self.base.assertTrue(READ_IMG)
        # 点击允许
        self.read.clickOpen()
        sleep(2)
        self.read.clickReadButton()
        # 断言是否进入阅读模式
        self.base.assertTrue(READ_IMG,False)
        # 点击地址栏阅读模式按钮,退出阅读模式
        self.read.clickReadButton()
        # 断言点击地址栏阅读模式按钮,是否正常退出阅读模式
        self.base.assertTrue(READ_NEXT)
        # 点击地址栏阅读模式按钮,进入阅读模式
        self.read.clickReadButton()
        # 断言点击地址栏阅读模式按钮,是否正常进入阅读模式
        self.base.assertTrue(READ_NEXT,False)
class TestDownPage():
    @pytest.fixture()
    def down_init(self, scope="function"):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.more = MorePage(self.driver)
        self.search = SearchPanelPage(self.driver)
        self.tool = ToolBarPanelPage(self.driver)
        self.set = SetUpPage(self.driver)
        self.down = DownPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.base.unlock()
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.home.clickHome()
        self.home.clickHomeOnPage(HOME_PAGE)
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    @allure.story('测试长按网页链接,点击“下载链接”,显示下载弹框,点击取消')
    def test001DownWebPage(self, down_init):
        '''
        1、打开浏览器,点击底部工具栏菜单menu_more按钮
        2、点击“设置”进入设置页面
        3、设置搜索引擎为“360”
        4、mback返回上一级页面(首页)
        5、点击“搜索框”,点击“搜索”按钮,访问网页,在页面内等待2秒
        6、长按网页链接,显示长按菜单弹框
        7、点击“下载链接”按钮,显示下载弹框
        8、断言“下载弹框”中的名称
        9、获取下载弹框中的标题
        10、点击下载弹框中的“取消”按钮
        11、断言显示“下载弹框”的元素不存在
        '''
        self.home.clickMore()
        self.tool.clickToolsPanel(SET_UP)
        self.set.clickSearchEngine()
        self.set.click360()
        self.pubmethod.clickBack()
        self.home.clickHomeSearch()
        self.search.clickSearchInto()
        sleep(2)
        self.down.longLink()
        self.down.clickDownLink()
        self.base.assertTrue(DOWNLOAD_NAME)
        title = self.down.getDownTitle(DOWNLOAD_NAME)
        self.down.clickCancelButton()
        self.base.assertTrue(title, False)

    @allure.story('测试长按网页链接下载,断言下载完成后的小红点')
    def test002DownWebPage(self, down_init):
        '''
        1、点击“搜索框”
        2、点击“搜索”按钮,访问网页,在页面内等待2秒
        3、长按网页链接,显示长按菜单弹框
        4、点击“下载链接”按钮,显示下载弹框
        5、在下载弹框中点击“下载”按钮
        6、点击底部工具栏菜单menu_more按钮,显示工具面板,等待5秒
        6、断言工具面板中下载完成后的“小红点”
        '''
        self.home.clickHomeSearch()
        self.search.clickSearchInto()
        sleep(2)
        self.down.longLink()
        self.down.clickDownLink()
        self.down.clickDownButton()
        self.home.clickMore()
        sleep(5)
        self.base.assertTrue(HOME_MORE_TIP)

    @allure.story('测试长按网页链接下载,下载完成后,断言下载管理中下载的文件存在')
    def test003DownWebPage(self, down_init):
        '''
        1、点击“搜索框”,
        2、点击“搜索”按钮,访问网页,在页面内等待2秒
        3、长按网页链接,显示弹框,点击“下载链接”按钮,显示下载弹框
        4、获取下载弹框中的标题名称
        5、在下载弹框中点击“下载”按钮
        6、点击底部工具栏菜单menu_more按钮,显示工具面板,等待5秒
        7、点击“下载管理”打开下载页面
        7、获取下载管理中下载好的文件名称标题
        8、断言“下载管理”页面中的下载文件名称与之前下载中的文件名称相等
        '''
        self.home.clickMore()
        self.tool.clickToolsPanel(DOWNLOAD_MANAGER)
        self.down.longPressElement()
        # 点击全选、删除下载文件按钮
        self.down.clickChoose()
        self.pubmethod.clickBack()
        self.home.clickHomeSearch()
        self.search.clickSearchInto()
        sleep(2)
        self.down.longLink()
        self.down.clickDownLink()
        beforeDownTitle = self.down.getDownTitle(DOWNLOAD_NAME)
        self.down.clickDownButton()
        self.home.clickMore()
        sleep(5)
        self.tool.clickToolsPanel(DOWNLOAD_MANAGER)
        afterDownTitle = self.down.getDownTitle(DOWN_LOAD_MANAGE_TITLE)
        self.base.assertEqual(beforeDownTitle, afterDownTitle, True)

    @allure.story('测试应用下载')
    def test004DownAppPage(self, down_init):
        '''
        1、点击“搜索框”
        2、输入“QQ”,点击“搜索”按钮
        3、点击页面中的“高速下载”
        4、显示下载弹框
        5、在下载弹框中点击“下载”按钮
        6、点击底部工具栏菜单menu_more按钮,显示工具面板
        7、点击“下载管理”打开下载页面
        8、断言下载中的状态
        '''
        self.home.clickHomeSearch()
        self.down.inputApp()
        self.search.clickSearchInto()
        self.down.clickAppDown()
        self.base.assertTrue(DOWNLOAD_NAME)
        self.down.clickDownButton()
        self.home.clickMore()
        self.tool.clickToolsPanel(DOWNLOAD_MANAGER)
        self.base.assertTrue(DOWN_LOAD_PROGRESS)
Exemple #17
0
class TestSearchPanelPage():
    @pytest.fixture(scope="function")
    def search_init(self):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.searchpanel = SearchPanelPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.home.clickHome()
        self.home.clickHomeOnPage(HOME_PAGE)
        self.pubmethod.mbackToHomeOrNegative()
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    # ---wmw
    @allure.story('测试搜索框')
    def test001SearchPanelPage(self, search_init):
        '''
        1、点击首页搜索框
        2、提取搜索框文本
        3、点击搜索按钮
        4、断言页面是否正常跳转到对应的搜索结果页
        '''
        self.home.clickHomeSearch()
        afterSearchText = self.searchpanel.clickSearchText()
        self.searchpanel.clickSearchInto()
        beforeSearchText = self.pubmethod.getBaiduApiText(LOCK)
        self.base.assertEqual(afterSearchText, beforeSearchText, True)

    # ---wmw
    @allure.story('测试历史面板热词是否正常跳转')
    def test002SearchPanelPage(self, search_init):
        '''
        1、点击首页搜索框
        2、获取第一个热词文本
        3、点击历史面板热词(默认第一个)
        4、断言页面是否打开正确
        '''
        self.home.clickHomeSearch()
        afterOneSearchHistory = self.searchpanel.clickHotWords()
        self.searchpanel.clickSearchHistory()
        beforeOneSearchHistory = self.pubmethod.getBaiduApiText(LOCK)
        self.base.assertEqual(afterOneSearchHistory, beforeOneSearchHistory,
                              True)

    # ---wmw
    @allure.story('测试换一换')
    def test003SearchPanelPage(self, search_init):
        '''
        1、点击首页搜索框
        2、获取第一个搜索热词
        3、点击换一换
        4、断言第一个搜索热词是否不存在
        '''
        self.home.clickHomeSearch()
        panel = self.searchpanel.clickHotWords()
        self.searchpanel.clickAnotherChange()
        self.base.assertTrue(panel, False, timeout=15)

    @allure.story('搜索页顶部地址栏输入,选中文字')
    def test004SearchPanelPage(self, search_init):
        '''
        1、点击首页搜索框
        2、点击输入框工具条前缀词“www.”
        3、长按并选中地址栏中的“www.”
        4、点击搜索框联想词,并打开网址
        5、点击地址栏,清空地址,显示搜索历史
        6.清空搜索历史
        '''
        # 点击首页搜索框
        self.home.clickHomeSearch()
        # 点击输入框工具条前缀词“www.”
        self.searchpanel.clickInputPanelPrefixes()
        # 拖动输入框工具条,选中地址栏文字
        self.searchpanel.swipe_InputPanel()
        # 点击搜索框,弹框消失
        self.searchpanel.clickSearchPanel()
        # 点击搜索框联想词
        self.searchpanel.clickAutomatedWord()
        # 判断是否正常打开flyme官网
        self.base.assertTrue(FLYME_WEBSITE)
        # 点击搜索框,清空地址
        self.searchpanel.clickSearchPanel()
        self.searchpanel.clearSearchPanel()
        # 判断搜索历史是否存在
        self.base.assertTrue(SEARCHHISTORY)
        # 清空搜索历史
        self.searchpanel.clearSearchHistory()
        self.base.assertTrue(SEARCHHISTORY, False)

    @allure.story('打开百度首页,滑动页面检查顶部地址栏是否高亮,点击搜索历史')
    def test005SearchPanelPage(self, search_init):
        '''
        1、点击首页搜索框,输入百度网址
        2、打开百度首页,滑动页面
        3、检查顶部地址栏是否展开
        4、检查搜索历史,长按删除
        '''
        # 点击首页搜索框
        self.home.clickHomeSearch()
        # 输入百度地址,进入百度首页
        self.searchpanel.inputBaidu()
        self.searchpanel.clickSearchInto()
        # 监听地理位置弹框,点击“始终允许”
        self.base.browserWatcher()
        # 判断顶部地址栏是否展开
        self.base.assertTrue(ADDRESS_CONTAINER_REFRESH)
        # 向上滑动页面,收起顶部地址栏
        self.searchpanel.swipeBaidu()
        self.base.assertTrue(ADDRESS_CONTAINER_REFRESH, False)
        # 点击并清空地址栏,判断搜索历史是否存在
        self.searchpanel.clickwebsite()
        self.searchpanel.clearSearchPanel()
        self.base.assertTrue(SEARCHHISTORY)
        # 长按搜索历史中的百度网址
        self.searchpanel.long_clickSearchHistory()
        self.base.assertTrue(DELETESEARCHHISTORY)
        # 点击删除按钮
        self.searchpanel.delete_SearchHistory()
        self.base.assertTrue(DELETESEARCHHISTORY, False)

    @allure.story('搜索框输入主题美化地址,检查外部应用跳转是否正常')
    def test006SearchPanelPage(self, search_init):
        '''

        1、点击首页搜索框,输入主题美化地址
        2、弹出跳转提示,点击允许,跳转至主题美化APP
        '''
        # 点击首页搜索框
        self.home.clickHomeSearch()
        # 输入百度地址,进入百度首页
        self.searchpanel.inputCustomize()
        self.searchpanel.clickSearchInto()
        self.searchpanel.skipCustomize()
        self.base.assertTrue(CUSTOMIZE)

    @allure.story('地址栏多次点击刷新网页,进度条和页面加载正常 —— LJX')
    def test007SearchPanelPage(self, search_init):
        '''
        1、点击首页搜索框,输入主题美化地址
        2、弹出跳转提示,点击允许,跳转至主题美化APP
        '''
        # 点击首页搜索框,点击第1个热词进入搜索结果页,并点击5次刷新按钮
        self.home.clickHomeSearch()
        self.searchpanel.clickSearchHistory()
        self.searchpanel.clickMoreRefresh(ADDRESS_CONTAINER_REFRESH, 5)
Exemple #18
0
class TestQuitPage():
    @pytest.fixture()
    def quit_init(self, scope="function"):
        self.base = Base(self.driver)
        self.more = MorePage(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.windowstab = WindowsTabPage(self.driver)
        self.quit = ToolBarPanelPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.base.unlock()
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.home.clickHome()
        self.home.clickHomeOnPage(HOME_PAGE)
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    # 点击menu_more按钮,点击退出  ——LCM
    @allure.story('测试点击底部工具栏,点击退出按钮,再打开浏览器访问网页正常')
    def test001QuitOpenBrowser(self, quit_init):
        '''
        1、进入浏览器,点击导航网站-》安居客
        2、点击多窗口
        3、添加多窗口
        4、点击浏览的窗口tab网页
        5、点击底部工具栏的 menu_more 按钮
        6、点击退出按钮
        7、打开浏览器,点击导航网站-》更多
        8、断言页面中的搜索框默认词
        '''
        self.more.clickDaoHang(HOME_ANJUKE)
        self.windowstab.clickWindowsTab()
        self.windowstab.newWindowsTab(2)
        self.windowstab.openWindowsTabPage()
        self.home.clickMore()
        self.quit.clickToolsPanel(OUT)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.more.clickDaoHang(HOME_BUSINESS_MORE_TEXT)
        # 断言进入浏览器,点击导航网站-》更多,查看页面中搜索框默认词是否存在
        self.base.assertTrue(DEFAULT_WORD)

    # 点击menu_more按钮,点击退出  ——LCM
    @allure.story('测试点击底部工具栏,点击退出按钮,再打开浏览器,查看多窗口只有一个')
    def test002QuitOpenBrowser(self, quit_init):
        '''
        1、进入浏览器
        2、点击导航网站-》安居客
        3、点击多窗口
        4、添加多窗口(新增3个多窗口)
        5、点击浏览的窗口tab网页
        6、点击底部工具栏的 menu_more 按钮
        7、点击退出按钮
        8、打开浏览器
        9、断言多窗口数量不相等
        '''
        self.more.clickDaoHang(HOME_ANJUKE)
        self.windowstab.clickWindowsTab()
        self.windowstab.newWindowsTab(2)
        self.windowstab.openWindowsTabPage()
        winNumBefore = self.windowstab.getWindowsNum()
        self.home.clickMore()
        self.quit.clickToolsPanel(OUT)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        NumAfter = self.windowstab.getWindowsNum()
        # 断言退出浏览器之前和打开浏览器之后的多窗口数量
        self.base.assertEqual(winNumBefore, NumAfter, False)
Exemple #19
0
class TestNegativePage():
    @pytest.fixture(scope="function")
    def collectionAndHistory_init(self):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.negativescreen = NegativeScreenPage(self.driver)
        self.addtohome = AddToHomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.searchpanel = SearchPanelPage(self.driver)
        self.toolbarpanel = ToolBarPanelPage(self.driver)
        self.collectionandhistory = CollectionAndHistoryPage(self.driver)
        self.news = NewsPage(self.driver)
        self.windowstab = WindowsTabPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.mbackToHomeOrNegative()
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    @allure.story('测试取消清空历史功能 —— LJX')
    @pytest.mark.P1
    def test001CleanUpHistoryCancel(self, collectionAndHistory_init):
        '''
        1、先判断是否存在历史数据,不存在则造一条历史数据,存在则不处理
        2、点击工具栏中more菜单,再点击工具面板的“清空历史”,清空历史的弹框选择取消
        3、断言不存在“暂无历史记录”元素
        '''
        # 制造一条历史数据
        self.collectionandhistory.makeHistory(1)
        # 点击工具面板的“清空历史”,弹框选择取消
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(CLEAN_UP_HISTORY)
        self.toolbarpanel.clickToolsPanel(CLEAN_UP_CANCEL)
        # 再次进入工具面板的“清空历史”,断言页面不存在“暂无历史数据”元素
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(HISTORY)
        self.base.assertTrue(HISTORY_PAGE, False, timeout=3)

    @allure.story('测试确认清空历史功能 —— LJX')
    @pytest.mark.P1
    def test002CleanUpHistory(self, collectionAndHistory_init):
        '''
        1、先判断是否存在历史数据,不存在则造一条历史数据,存在则不处理
        2、点击工具栏中more菜单,再点击工具面板的“清空历史”,清空历史的弹框选择确定
        3、断言存在“暂无历史记录”元素
        '''
        # 制造一条历史数据
        self.collectionandhistory.makeHistory(1)
        # 点击工具面板的“清空历史”,弹框选择确定
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(CLEAN_UP_HISTORY)
        self.toolbarpanel.clickToolsPanel(CLEAN_UP)
        # 再次进入工具面板的“清空历史”,断言页面存在“暂无历史数据”元素
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(HISTORY)
        self.base.assertTrue(HISTORY_PAGE, timeout=3)

    @allure.story('收藏一篇文章,收藏夹下显示该文章;取消收藏后,收藏夹下不显示该文章 —— LJX')
    @pytest.mark.P1
    def test003CollectArticle(self, collectionAndHistory_init):
        '''
        1、进入资讯流的健康频道,下拉刷新,获取第1篇文章第标题,并收藏该文章,进入收藏夹获取第1条记录的标题,断言两个标题相等
        2、在收藏夹点击进入第1条记录详情,取消收藏,返回到收藏夹,获取第1条记录第标题,断言标题不相等
        '''
        # 进入资讯流,进入频道管理选择健康频道,下拉刷新
        self.home.clickInformation()
        self.news.clickNewsTriangle()
        self.news.clickNewsChannel(NEWS_CHANNEL_HEALTH)
        self.news.dropScrollNews()
        # 获取文章标题,并收藏该文章
        ArticleTitle = self.news.getNewsArticleTitle()
        self.news.clickOpenNewsArticle()
        self.news.clickArticleCollectPosition()
        # 返回上一层,进入我的收藏
        self.news.clickNewsBack()
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        # 获取我的收藏页第1条记录的标题,断言收藏的文章标题与收藏夹第1条记录的标题一致
        CollectionTitle = self.collectionandhistory.getCollectionTitle()
        self.base.assertEqual(ArticleTitle, CollectionTitle, True)
        # 点击进入我的收藏第1条记录,取消收藏
        self.collectionandhistory.clickCollection(COLLECTION_ID)
        self.news.clickArticleCollectPosition()
        # 返回上一层,重新进入我的收藏,获取第1条记录标题
        self.news.clickNewsBack()
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        CollectionTitle = self.collectionandhistory.getCollectionTitle()
        # 断言取消收藏的文章标题与收藏夹第1条记录的标题不一致
        self.base.assertEqual(ArticleTitle, CollectionTitle, False)

    @allure.story('打开网页-添加收藏-编辑-新建收藏文件夹-收藏进去-能改的都改一遍-收藏夹打开该收藏正常 —— LJX')
    @pytest.mark.P1
    def test004CollectWebToFolder(self, collectionAndHistory_init):
        '''
        1、先删除"自动化测试"文件夹,点击搜索框,进入搜索面板,点击搜索,进入搜索结果页
        2、添加收藏,编辑收藏文件夹,新增一个文件夹,并选择添加到该文件夹下
        3、进入收藏夹该新增文件夹下,断言是否存在1条记录
        '''
        # 先删除“自动化测试”文件夹
        # self.collectionandhistory.deleteCollectFolder()
        # 点击搜索面板第1个热词,进入搜索结果页
        self.home.clickHomeSearch()
        self.searchpanel.clickSearchInto()
        # 添加到收藏夹,编辑位置信息,新建"自动化测试"文件夹并收藏到该文件夹下
        self.home.clickMore()
        sleep(1)
        self.toolbarpanel.clickToolsPanel(ADD_COLLECTION)
        self.collectionandhistory.clickAddCollectFolder(COLLECT_EDIT_ID)
        sleep(1)
        try:
            self.collectionandhistory.clickAddCollectFolder(
                COLLECT_FOLDER_POSITION)
        except Exception as e:
            logging.info('忽略点击编辑过程中的报错')

        self.collectionandhistory.clickAddCollectFolder(NEW_FOLDER_ID)
        self.collectionandhistory.inputCollectFolderName()
        try:
            self.collectionandhistory.clickAddCollectFolder(NEW_FOLDER_CONFIRM)
        except Exception as e:
            logging.info('忽略新建文件夹时点击确定出现的报错')
        try:
            self.collectionandhistory.clickAddCollectFolder(
                COLLECT_NEW_FOLDER_NAME)
        except Exception as e:
            logging.info('忽略点击"自动化测试"文件夹的报错')
        self.collectionandhistory.clickAddCollectFolder(
            COLLECT_NEW_FOLDER_POSITION)
        # 编辑网页URL、网页名称为百度网页,点击"确认",收藏到收藏夹中
        self.collectionandhistory.setText(ADD_COLLECT_URL, COLLECT_NAME)
        self.collectionandhistory.setText(ADD_COLLECT_ADDRESS, COLLECT_URL)
        self.collectionandhistory.clickAddCollectFolder(CONFIRM_ID)
        # 等待2秒,"已添加到收藏"toast消失后才能定位到其它元素
        sleep(2)
        # 进入收藏夹新建的"自动化测试"文件夹,断言是否存在"百度一下"
        self.home.clickMore()
        sleep(1)
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        self.collectionandhistory.clickCollection(COLLECT_NEW_FOLDER_NAME)
        self.base.assertTrue(COLLECT_NAME)
        # 点击进入"百度一下",监听地理位置弹框,断言存在'百度一下,你就知道'
        self.collectionandhistory.clickCollection(COLLECT_NAME)
        self.base.browserWatcher()
        sleep(2)
        self.base.assertTrue(BAIDU_HOME)

    @allure.story('添加一个网页到收藏/主页常用/桌面,查看是否添加到对应目录下并且点击能正常打开 —— LJX')
    @pytest.mark.P1
    def test005CollectWebPage(self, collectionAndHistory_init):
        '''
        1、点击搜索框,进入搜索面板,获取第1个热词文本,点击第1个热词,进入搜索结果页
        2、添加到收藏夹,进入收藏夹获取第1条记录文本,断言是否刚添加收藏夹的热词
        3、添加到主页常用,进入负一屏,断言当前页面是否存在刚收藏的热词元素
        4、发送到桌面,退出浏览器,断言桌面是否存在刚发送到桌面到热词元素
        '''
        # 进入搜索面板,获取第1个热词文本,并进入该热词的搜索结果页
        self.home.clickHomeSearch()
        hotSearchWord = self.searchpanel.clickHotWords()
        self.searchpanel.clickSearchHistory()
        # 添加到收藏夹
        self.home.clickMore()
        sleep(1)
        self.toolbarpanel.clickToolsPanel(ADD_COLLECTION)
        self.collectionandhistory.clickAddCollectFolder(ADD_TO_COLLECTION)
        # 等待2秒,"已添加到收藏"toast提示消失后才能定位到其它元素
        sleep(2)
        # 进入收藏夹新建的文件夹下,断言是否存在数据
        self.home.clickMore()
        sleep(1)
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        # 获取我的收藏页第1条记录的标题
        CollectionTitle = self.collectionandhistory.getCollectionTitle()
        self.base.assertEqual(hotSearchWord, CollectionTitle, True)
        # 返回上一层,重新添加收藏-》添加到主页常用
        self.collectionandhistory.clickAddCollectFolder(COLLECTION_BACK_ID)
        self.home.clickMore()
        sleep(1)
        self.toolbarpanel.clickToolsPanel(ADD_COLLECTION)
        self.collectionandhistory.clickAddCollectFolder(ADD_TO_NEGATIVE)
        # 等待2秒,"已添加到主页常用"toast提示消失后才能定位到其它元素
        self.home.clickHome()
        # 进入负一屏,断言是否存在添加到搜索热词
        self.home.clickHomeOnPage(MYCOLLECTION)
        self.base.assertTrue(hotSearchWord, True, timeout=3)
        # 返回上一层,重新添加收藏-》发送到桌面3次
        self.pubmethod.clickBack()
        self.collectionandhistory.sendToDeskCollect()
        # 等待2秒,"已添加到主页常用"toast提示消失后才能定位到其它元素
        sleep(2)
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.base.assertTrue(hotSearchWord, True, timeout=3)

    @allure.story('我的收藏-长按单个-删除,检查是否正常删除 —— LJX')
    @pytest.mark.P1
    def test006DeleteCollectionOne(self, collectionAndHistory_init):
        '''
        1、造一条收藏记录
        2、进入首页,再进入收藏夹,获取第1条记录的标题
        3、长按1条记录,删除,断言被删除记录不存在
        '''
        # 造1条收藏记录
        self.collectionandhistory.makeCollection(1)
        # 进入首页,再进入收藏夹
        self.home.clickHomeOnPage(HOME_PAGE)
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        # 获取收藏夹第1条记录标题,然后长按删除
        CollectionTitle = self.collectionandhistory.getCollectionTitle()
        self.collectionandhistory.longClickCollection(COLLECTION_ID)
        self.collectionandhistory.clickCollectDelete()
        self.collectionandhistory.clickCollection(FRAME_DELETE_ID)
        # 断言当前页面不存在已删除到收藏记录
        self.base.assertTrue(CollectionTitle, False, timeout=3)

    @allure.story('我的收藏-长按多个-删除,检查是否正常删除 —— LJX')
    @pytest.mark.P1
    def test007DeleteCollectionMore(self, collectionAndHistory_init):
        '''
        1、造3条收藏记录
        2、进入首页,再进入收藏夹
        3、长按3条记录,删除,断言被删除的记录不存在
        '''
        # 造3条收藏记录
        self.collectionandhistory.makeCollection(3)
        # 进入首页,再进入收藏夹
        self.home.clickHomeOnPage(HOME_PAGE)
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        # 获取收藏夹第1、2、3条记录的标题
        CollectionTitleOne = self.collectionandhistory.getCollectionTitle(0)
        CollectionTitleTwo = self.collectionandhistory.getCollectionTitle(1)
        CollectionTitleThree = self.collectionandhistory.getCollectionTitle(2)
        # 删除第1、2、3条记录
        self.collectionandhistory.longClickCollection(COLLECTION_ID, 3)
        self.collectionandhistory.clickCollectDelete()
        self.collectionandhistory.clickCollection(FRAME_DELETE_ID)
        # 断言第1、2、3条记录的标题不存在
        self.base.assertTrue(CollectionTitleOne, False, timeout=3)
        self.base.assertTrue(CollectionTitleTwo, False, timeout=3)
        self.base.assertTrue(CollectionTitleThree, False, timeout=3)

    @allure.story('历史-长按1个-删除,检查是否正常删除 —— LJX')
    @pytest.mark.P1
    def test008DeleteHistoryOne(self, collectionAndHistory_init):
        '''
        1、造一条历史记录
        2、进入首页,再进入历史
        3、长按1条记录,删除,断言被删除记录不存在
        '''
        # 制造一条历史数据
        self.collectionandhistory.makeHistory(1)
        # 进入首页,再进入历史
        self.home.clickHomeOnPage(HOME_PAGE)
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(HISTORY)
        # 获取第1条记录的标题,并长按删除
        HistoryTitle = self.collectionandhistory.getHistoryTitle(1)
        self.collectionandhistory.longClickHistory(HISTORY_ID)
        self.collectionandhistory.clickHistoryDelete()
        self.collectionandhistory.clickCollection(FRAME_DELETE_ID)
        # 断言当前页面不存在已删除到历史记录
        self.base.assertTrue(HistoryTitle, False, timeout=3)

    @allure.story('历史-长按多个-删除,检查是否正常删除 —— LJX')
    @pytest.mark.P1
    def test009DeleteHistoryMore(self, collectionAndHistory_init):
        '''
        1、造3条历史记录
        2、进入首页,再进入历史
        3、长按3条记录,删除,断言被删除的3条记录不存在
        '''
        # 制造3条历史数据
        self.collectionandhistory.makeHistory(3)
        # 进入首页,再进入历史
        self.home.clickHomeOnPage(HOME_PAGE)
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(HISTORY)
        # 获取历史第1、2、3条记录的标题
        HistoryTitleOne = self.collectionandhistory.getHistoryTitle(1)
        HistoryTitleTwo = self.collectionandhistory.getHistoryTitle(2)
        HistoryTitleThree = self.collectionandhistory.getHistoryTitle(3)
        # 删除第1、2、3条记录
        self.collectionandhistory.longClickHistory(HISTORY_ID, 3)
        self.collectionandhistory.clickHistoryDelete()
        self.collectionandhistory.clickCollection(FRAME_DELETE_ID)
        # 断言第1、2、3条记录的标题不存在
        self.base.assertTrue(HistoryTitleOne, False, timeout=3)
        self.base.assertTrue(HistoryTitleTwo, False, timeout=3)
        self.base.assertTrue(HistoryTitleThree, False, timeout=3)

    @allure.story('我的收藏-长按单个-发送至桌面,检查是否成功添加至桌面且正常打开 —— LJX')
    @pytest.mark.P1
    def test10AddToDeskOne(self, collectionAndHistory_init):
        '''
        1、进入首页,再进入收藏夹
        2、长按1条记录,发送到桌面3次,断言桌面存在这条记录
        3、桌面点击这条记录,断言当前页面存在记录标题和工具入口
        '''
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        # 获取第1条记录的标题,长按第1条记录并发送到桌面3次
        CollectionTitle = self.collectionandhistory.getCollectionTitle()
        self.collectionandhistory.clickCollectAddToDesk()
        # 退出浏览器,断言是否存在该记录
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.base.assertTrue(CollectionTitle, True, timeout=3)
        # 桌面点击打开该记录,断言是否正常打开
        self.base.clickByElement(CollectionTitle, '发送到桌面的收藏')
        self.base.assertTrue(CollectionTitle, True, timeout=3)
        self.base.assertTrue(HOME_MORE, True, timeout=3)

    @allure.story('我的收藏-长按多个-发送至桌面,检查是否成功添加至桌面且正常打开 —— LJX')
    @pytest.mark.P1
    def test011AddToDeskMore(self, collectionAndHistory_init):
        '''
        1、进入首页,再进入收藏夹,长按第1、2、3条记录,发送到桌面3次,断言桌面存在这3条记录
        2、桌面点击第3条记录,断言当前页面存在记录标题和工具入口
        '''
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        # 获取前3条记录的标题,长按前3条记录并发送到桌面3次
        CollectionTitleOne = self.collectionandhistory.getCollectionTitle(0)
        CollectionTitleTwo = self.collectionandhistory.getCollectionTitle(1)
        CollectionTitleThree = self.collectionandhistory.getCollectionTitle(2)
        self.collectionandhistory.clickCollectAddToDesk(3)
        # 退出浏览器,断言是否存在该记录
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.base.assertTrue(CollectionTitleOne, True, timeout=3)
        self.base.assertTrue(CollectionTitleTwo, True, timeout=3)
        self.base.assertTrue(CollectionTitleThree, True, timeout=3)
        # 桌面点击打开第3条记录,断言是否正常打开
        self.base.clickByElement(CollectionTitleThree, '发送到桌面的收藏')
        self.base.assertTrue(CollectionTitleThree, True, timeout=3)
        self.base.assertTrue(HOME_MORE, True, timeout=3)

    @allure.story('我的收藏-长按1条记录-新窗口打开,检查是否正常打开且多窗口数量+1 —— LJX')
    @pytest.mark.P1
    def test12NewWindowOpenOne(self, collectionAndHistory_init):
        '''
        1、进入收藏夹,长按1条记录,新窗口打开,断言正常打开且新窗口数量增加
        '''
        # 收藏一个网页到收藏夹
        self.home.clickHomeSearch()
        hotSearchWord = self.searchpanel.clickHotWords()
        self.searchpanel.clickSearchHistory()
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(ADD_COLLECTION)
        self.collectionandhistory.clickAddCollectFolder(ADD_TO_COLLECTION)
        # 返回上一层
        self.pubmethod.clickBack()
        # 获取当前多窗口数量
        winNumBefore = self.windowstab.getWindowsNum()
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        self.collectionandhistory.longClickCollection(COLLECTION_ID)
        self.collectionandhistory.clickCollectNewWindowOpen()
        # 新窗口打开后的窗口数量
        winNumAfter = self.windowstab.getWindowsNum()
        self.base.assertTrue(hotSearchWord, timeout=3)
        self.base.assertEqual(winNumBefore, winNumAfter, False, timeout=3)

    @allure.story('我的收藏-长按3条记录-新窗口打开,检查是否正常打开且多窗口数量+3 —— LJX')
    @pytest.mark.P1
    def test13NewWindowOpenMore(self, collectionAndHistory_init):
        '''
        1、进入收藏夹,长按多条记录,新窗口打开,断言正常打开且新窗口数量+3
        '''
        # 收藏一个网页到收藏夹
        self.home.clickHomeSearch()
        hotSearchWord = self.searchpanel.clickHotWords()
        self.searchpanel.clickSearchHistory()
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(ADD_COLLECTION)
        self.collectionandhistory.clickAddCollectFolder(ADD_TO_COLLECTION)
        # 返回上一层
        self.pubmethod.clickBack()
        # 获取当前多窗口数量
        winNumBefore = self.windowstab.getWindowsNum()
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(MY_COLLECTION)
        self.collectionandhistory.longClickCollection(COLLECTION_ID, 3)
        self.collectionandhistory.clickCollectNewWindowOpen()
        # 新窗口打开后的窗口数量
        winNumAfter = self.windowstab.getWindowsNum()
        self.base.assertTrue(hotSearchWord, timeout=3)
        self.base.assertEqual(int(winNumBefore) + 3,
                              int(winNumAfter),
                              True,
                              timeout=3)

    @allure.story('开启无痕模式,访问网站,不会生成历史记录 —— LJX')
    @pytest.mark.P1
    def test14NoMarking(self, collectionAndHistory_init):
        '''
        1、获取历史第1条记录标题
        2、打开无痕模式,点击一个热词进行搜索
        3、返回上一层,获取历史第1条记录标题
        4、断言历史第1条记录的标题没有改变
        '''
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(HISTORY)
        historyTitleBefore = self.collectionandhistory.getHistoryTitle(1)
        # 返回上一层
        self.pubmethod.clickBack()
        self.home.clickMore()
        self.collectionandhistory.openNoMarking()
        # 造一条历史数据
        self.collectionandhistory.makeHistory(1)
        self.home.clickMore()
        self.toolbarpanel.clickToolsPanel(HISTORY)
        historyTitleAfter = self.collectionandhistory.getHistoryTitle(1)
        self.base.assertEqual(historyTitleBefore,
                              historyTitleAfter,
                              True,
                              timeout=3)
class TestSetUpPage():
    @pytest.fixture(scope="function")
    def setUp_init(self):
        self.base = Base(self.driver)
        self.home = HomePage(self.driver)
        self.pubmethod = PubMethod(self.driver)
        self.searchpanel = SearchPanelPage(self.driver)
        self.toolbarpanel = ToolBarPanelPage(self.driver)
        self.setup = SetUpPage(self.driver)
        self.news = NewsPage(self.driver)
        logging.info("")
        logging.info("****开始执行用例****")
        self.pubmethod.stopApp(BROWSER_PACKAGE_NAME)
        self.pubmethod.startApp(BROWSER_PACKAGE_NAME)
        self.base.browserWatcher()
        self.home.clickHome()
        self.home.clickHomeOnPage(HOME_PAGE)
        yield
        logging.info("****用例执行结束****")
        logging.info("")

    # ---wmw
    @allure.story('测试设置清除浏览器')
    def test001SetUpPage(self, setUp_init):
        '''

        1、点击主页工具菜单
        2、点击设置
        3、点击清除浏览器数据
        4、点击Cookies
        5、点击账号密码
        6、点击地理位置授权
        7、点击清除数据按钮
        8、点击完成按钮
        9、点击mback返回
        10、点击首页搜索框
        11、搜索框输入文本
        12、点击进入
        13、断言页面是否会重新提示地址位置授权

        '''
        # 点击主页工具菜单
        self.home.clickMore()
        # 点击设置
        self.toolbarpanel.clickSetUp()
        # 点击清除浏览器数据
        self.setup.clickClearCoolkies()
        # 点击Cookies
        self.setup.clickCookies()
        # 点击账号密码
        self.setup.clickAccountsAndPasswords()
        # 点击地理位置授权
        self.setup.clickLocationAccess()
        # 点击清除数据按钮
        self.setup.clickClearData()
        # 点击完成按钮
        self.setup.clickDone()
        # 点击mback
        self.pubmethod.clickBack()
        # 点击首页搜索框
        self.home.clickHomeSearch()
        # 搜索框输入文本"www.baidu.com"
        self.setup.inputbaidu()
        # 点击进入
        self.searchpanel.clickSearchInto()
        # 断言页面是否会重新提示地址位置授权
        self.base.assertTrue(GEOGRAPHY)

    # ---wmw
    @allure.story('测试切换搜索引擎')
    def test002SetUpPage(self, setUp_init):
        '''

        1、点击主页工具菜单
        2、点击设置
        3、点击搜索引擎
        4、点击百度
        5、点击mback返回
        6、点击首页搜索框
        7、搜索框输入123
        8、点击搜索
        9、# 断言页面是否存在百度

        '''
        # 点击主页工具菜单
        self.home.clickMore()
        # 点击设置
        self.toolbarpanel.clickSetUp()
        # 点击搜索引擎
        self.setup.clickSearchEngine()
        # 点击百度
        self.setup.clickBaidu()
        # 点击mback
        self.pubmethod.clickBack()
        # 点击首页搜索框
        self.home.clickHomeSearch()
        # 搜索框输入123
        self.setup.inputNumber()
        # 点击搜索
        self.searchpanel.clickSearchInto()
        # 断言页面是否存在百度
        self.base.assertTrue(SETUP_BAIDU)

    # ---wmw
    @allure.story('测试恢复默认设置')
    def test003SetUpPage(self, setUp_init):
        '''
        1、点击主页工具菜单
        2、点击设置
        3、点击广告屏蔽
        4、获取未点击前,广告屏蔽,精选内容推送开关状态
        5、点击精选内容推送
        6、向下滑动到恢复默认设置
        7、点击恢复默认设置
        8、点击恢复
        9、点击主页工具菜单
        10、点击设置
        11、获取点击后,广告屏蔽,精选内容推送开关状态
        12、判断点击恢复默认设置前,广告屏蔽开关状态和恢复后广告屏蔽开关状态
        '''

        # 点击主页工具菜单
        self.home.clickMore()
        # 点击设置
        self.toolbarpanel.clickSetUp()
        # 点击广告屏蔽
        self.setup.clickBlockAds(BLOCK_ADS_SWITCH)
        BeforeBlockAdsText = self.setup.obtainBlockAdsSwitch(BLOCK_ADS_SWITCH)
        sleep(4)
        # 点击精选内容推送
        self.setup.clickSwipeLeftRight(SWIPE_LEFT_RIGHT_SWITCH)
        sleep(4)
        BeforeSwipeLeftRight = self.setup.obtainSwipeLeftRightSwitch(
            SWIPE_LEFT_RIGHT_SWITCH)
        # 向下滑动到恢复默认设置
        self.base.scrollToElement(SETUP_RESET_TEXT)
        # 点击恢复默认设置
        self.setup.clickResetToDefault()
        # 点击恢复
        self.setup.clickReset()
        # 点击主页工具菜单
        self.home.clickMore()
        # 点击设置
        self.toolbarpanel.clickSetUp()
        AfterBlockAdsText = self.setup.obtainBlockAdsSwitch(BLOCK_ADS_SWITCH)
        AfterSwipeLeftRight = self.setup.obtainSwipeLeftRightSwitch(
            SWIPE_LEFT_RIGHT_SWITCH)
        # 判断点击恢复默认设置前,广告屏蔽开关状态和恢复后广告屏蔽开关状态
        self.base.assertEqual(BeforeBlockAdsText, AfterBlockAdsText, False)
        self.base.assertEqual(BeforeSwipeLeftRight, AfterSwipeLeftRight, False)

    # ---wmw
    @allure.story('测试简版显示是否正常')
    def test004SetUpPage(self, setUp_init):

        # 点击主页工具菜单
        self.home.clickMore()
        # 点击设置
        self.toolbarpanel.clickSetUp()
        # 点击魅族头条设置
        self.setup.clickMeizuHeadlinesSettings()
        # 点击简版显示
        self.setup.clickSimple()
        # 点击mback
        self.pubmethod.clickBack()
        # 断言页面魅族头条是否存在
        self.base.assertTrue(SETUP_MEIZU_HEADLINES)
        # 点击简版显示--更多
        self.setup.clickSetUpMore()
        # 点击“倒三角”进入频道管理页面
        self.news.clickNewsTriangle()
        # 点击“星座”频道打开,进入资讯流列表
        self.news.clickNewsChannel(NEWS_CHANNEL_CONSTELLATION)
        # 提取资讯流页面第一个文章的文本信息
        afterText = self.news.getNewsArticleTitle()
        # 点击工具栏资讯刷新页面
        self.home.clickInformation()
        # 断言页面是否存刷新成功
        self.base.assertTrue(afterText, False)
        sleep(5)
        # 打开资讯文章
        self.news.clickOpenNewsArticle()
        beforeText = self.pubmethod.getBaiduApiText(NEWS_PAGE_MOREMENU)
        self.base.assertEqual(afterText, beforeText, True)