def test_activity(self):
        logger.info("开始执行书详页促销活动脚本...")

        pc = ParseConfigFile()

        try:

            # books_data=getDataList('双周特价')
            # books_data=getDataList('本周特价')
            #
            # bookid=str(books_data[0]['ebook_id'])
            testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookcity'))

            book_city_page=BookCityPage(testBookDetailNotNeedLogin.browser)
            book_city_page.discountButton().click()
            time.sleep(1)

            discount_page=WeeklyDiscountPage(testBookDetailNotNeedLogin.browser)
            discount_page.firstBook().click()
            time.sleep(1)
            bookid=re.search(r'[0-9]{8}', testBookDetailNotNeedLogin.browser.current_url).group()


            testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))

            logger.info('启动浏览器,访问"书籍详情"页面...')
            bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
            activity_obj = bookDetailPage.acivityObj()
            activity_text = activity_obj.text.strip(string.whitespace)
            api_activity=BookDetai.getData(bookid)['promotion_msg']

            try:

                self.assertIs(activity_text==api_activity, True)


                logger.info('书详页促销活动脚本执行成功!用例通过')

            except AssertionError as e:
                logger.debug('书详页促销活动脚本执行失败!用例通过')

                raise e

        except ElementNotVisibleException as e:

            logger.error("数据问题,元素没有找到..")

        except NoSuchElementException as e:

            logger.error("数据问题..重试")

        except Exception as e:

            logger.error(e)

            raise e
    def test_price_no_discount_book(self):
        logger.info("开始执行书详页非折扣书价格脚本...")

        #获取是否执行列
        isExecuteUser=testBookDetailNotNeedLogin.excelObj.get_col_values(book_isExecute, sheet_name='价格逻辑验证书籍')
        pc = ParseConfigFile()

        for idx,i in enumerate(isExecuteUser[1:]):
            start_time=time.time()
            bookType=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_type)
            if 'Y'==i and "没折扣"==bookType:
                bookid=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_id)
                bookname=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_name)
                logger.info("执行测试数据:%s,%s"%(bookid,bookname))
                try:
                    testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
                    realprice_obj=bookDetailPage.realPriceObj()
                    # realprice=realprice_obj.text.strip('阅豆')
                    realprice=str(int(round(float(realprice_obj.text.strip('¥'))*100)))
                    api_realprice=str(BookDetai.getData(bookid)['jd_price'])

                    try:

                        self.assertIs(realprice_obj.is_displayed() and api_realprice==realprice,True)
                        logger.info('书详页非折扣书籍脚本执行成功!用例通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult, 'success', 'green')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time, str(round((time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('书详页非折扣书籍价格脚本执行失败!用例通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult, 'fail', 'red')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time, str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_price_sell_out_book(self):
        logger.info("开始执行书详页下柜书价格脚本...")

        #获取是否执行列
        isExecuteUser=testBookDetailNotNeedLogin.excelObj.get_col_values(book_isExecute, sheet_name='价格逻辑验证书籍')
        pc = ParseConfigFile()

        for idx,i in enumerate(isExecuteUser[1:]):
            start_time=time.time()
            bookType=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_type)
            if 'Y'==i and "下柜"==bookType:
                bookid=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_id)
                bookname=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_name)
                logger.info("执行测试数据:%s,%s"%(bookid,bookname))
                try:

                    testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
                    price=bookDetailPage.priceObj()

                    try:

                        self.assertIs(price.is_displayed() and "此书已下柜"==price.text,True)
                        logger.info('书详页下柜书价格脚本执行成功!用例通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult, 'success', 'green')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time, str(round((time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('书详页下柜书书价格脚本执行失败!用例不通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult, 'fail', 'red')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time, str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_recomment_books(self):
        logger.info("开始执行书详页相关书籍推荐脚本...")

        pc = ParseConfigFile()

        try:

            testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % ('30331055'))

            logger.info('启动浏览器,访问"书籍详情"页面...')
            bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
            page_recommand_books=[ item for item in bookDetailPage.allRecommandBooksObj()]

            try:

                for i in page_recommand_books:
                    self.assertIs(i.is_displayed(), True)

                logger.info('书详页相关图书推荐脚本执行成功!用例通过')

            except AssertionError as e:
                logger.debug('书详页相关图书推荐脚本执行失败!用例通过')

                raise e

        except ElementNotVisibleException as e:

            logger.error("数据问题,元素没有找到..")

        except NoSuchElementException as e:

            logger.error("数据问题..重试")

        except Exception as e:

            logger.error(e)

            raise e
Пример #5
0
    def test_Add_Book_and_Delete_Book(self):
        #获取是否执行列
        isExecuteUser = TesShoppingCart.excelObj.get_col_values(
            book_isExecute, sheet_name='购买书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            if i == 'Y':
                bookid = TesShoppingCart.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = TesShoppingCart.excelObj.get_cell_value(
                    idx + 2, book_name)
                logger.info("执行测试数据:%s,%s" % (bookid, bookname))
                # 通过接口api拿到我的书籍列表中的书
                my_books_data = MyBooks.getData(
                    TesShoppingCart.excelObj.get_cell_value(
                        idx + 2, buyer_pin))
                # 判断buyer是否已经拥有该书:
                have_flag = bookid in my_books_data
                if have_flag:
                    TesShoppingCart.excelObj.write_cell_value(
                        idx + 2, book_isExecute, 'N')
                else:
                    try:

                        TesShoppingCart.browser.get(
                            pc.getUrl('bookdetail') % (bookid))

                        logger.info('启动浏览器,访问"书详页"页面...')
                        book_detail_page = BookDetailPage(
                            TesShoppingCart.browser)

                        add_shopping_cart_button = book_detail_page.shopCartButton(
                        )
                        TesShoppingCart.browser.execute_script(
                            "arguments[0].scrollIntoView();",
                            add_shopping_cart_button)

                        add_shopping_cart_button.click()
                        time.sleep(2)
                        add_shopping_cart_button.click()
                        shopping_cart_page = ShoppingCartPage(
                            TesShoppingCart.browser)

                        try:
                            first_book_in_shopping_cart = shopping_cart_page.shoppingCartBookListObj(
                            )[0].text
                            self.assertIs(
                                bookname in first_book_in_shopping_cart, True)

                            shopping_cart_page.shoppingCartBookOptionListObj(
                            )[0].click()
                            shopping_cart_page.shoppingCartDeleteButton(
                            ).click()
                            time.sleep(2)
                            shopping_cart_page.shoppingCartDeleteConfirmButton(
                            ).click()

                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, execute_testResult, 'success',
                                'green')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, execute_time,
                                str(round(
                                    (time.time() - start_time) / 1000, 2)) +
                                's')
                            logger.info('购物车删除书籍,用例通过!')
                            break

                        except AssertionError as e:
                            logger.debug('购物车删除书籍,用例不通过!')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, execute_testResult, 'fail', 'red')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, execute_time,
                                str(time.time() - start_time) + 'ms', 'red')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, book_isExecute, 'N')
                            raise e

                    except ElementNotVisibleException as e:

                        logger.error("数据问题,元素没有找到..")

                    except NoSuchElementException as e:

                        logger.error("数据问题..重试")

                    except Exception as e:

                        logger.error(e)

                        raise e
            else:
                continue
Пример #6
0
    def test_Add_Book_and_Buy_Book(self):
        # 获取是否执行列
        isExecuteUser = TesShoppingCart.excelObj.get_col_values(
            book_isExecute, sheet_name='购买书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            if i == 'Y':
                bookid = TesShoppingCart.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = TesShoppingCart.excelObj.get_cell_value(
                    idx + 2, book_name)
                logger.info("执行测试数据:%s,%s" % (bookid, bookname))
                # 通过接口api拿到我的书籍列表中的书
                my_books_data = MyBooks.getData(
                    TesShoppingCart.excelObj.get_cell_value(
                        idx + 2, buyer_pin))
                # 判断buyer是否已经拥有该书:
                have_flag = bookid in my_books_data
                if have_flag:
                    TesShoppingCart.excelObj.write_cell_value(
                        idx + 2, book_isExecute, 'N')
                else:
                    try:

                        TesShoppingCart.browser.get(
                            pc.getUrl('bookdetail') % (bookid))

                        logger.info('启动浏览器,访问"书详页"页面...')
                        book_detail_page = BookDetailPage(
                            TesShoppingCart.browser)

                        add_shopping_cart_button = book_detail_page.shopCartButton(
                        )
                        # TesShoppingCart.browser.execute_script("arguments[0].scrollIntoView();", add_shopping_cart_button)

                        add_shopping_cart_button.click()
                        time.sleep(2)
                        add_shopping_cart_button.click()
                        shopping_cart_page = ShoppingCartPage(
                            TesShoppingCart.browser)
                        price = shopping_cart_page.shoppingCartBookPriceListObj(
                        )[0].text
                        book_image = shopping_cart_page.shoppingCartBookImageListObj(
                        )[0]
                        book_name_in_cart = shopping_cart_page.shoppingCartBookNameListObj(
                        )[0]

                        try:
                            self.assertIs(book_image.is_displayed(), True)
                            self.assertIs(book_name_in_cart.is_displayed(),
                                          True)
                            first_book_in_shopping_cart = shopping_cart_page.shoppingCartBookListObj(
                            )[0].text
                            self.assertIs(
                                bookname in first_book_in_shopping_cart, True)

                            shopping_cart_page.shoppingCartBookOptionListObj(
                            )[0].click()
                            shopping_cart_page.shoppingCartSettlementButton(
                            ).click()

                            time.sleep(2)
                            avail_amount = shopping_cart_page.shoppingCartSettlementAvailAmountObj(
                            ).text.strip('-')
                            settlement_amount = shopping_cart_page.shoppingCartSettlementAmountObj(
                            ).text
                            check_price = False
                            if price == avail_amount and price == settlement_amount:
                                check_price = True
                            self.assertIs(check_price, True)
                            shopping_cart_payable_amount = shopping_cart_page.shoppingCartPayableAmountObj(
                            ).text
                            if '¥0' in shopping_cart_payable_amount:
                                shopping_cart_buy_confirm_btn = shopping_cart_page.shoppingCartBuyConfirmButton(
                                )
                                shopping_cart_buy_confirm_btn.click()
                                time.sleep(2)
                                self.assertIs(
                                    "支付完成" == TesShoppingCart.browser.title,
                                    True)
                                TesShoppingCart.excelObj.write_cell_value(
                                    idx + 2, book_isExecute, 'N')
                                TesShoppingCart.excelObj.write_cell_value(
                                    idx + 2, execute_testResult, 'success',
                                    'green')
                                TesShoppingCart.excelObj.write_cell_value(
                                    idx + 2, execute_time,
                                    str(
                                        round(
                                            (time.time() - start_time) / 1000,
                                            2)) + 's')
                                logger.info('购物车购买书籍,用例通过!')
                                break
                            else:
                                logger.warning('余额不足...')
                                text_mail(
                                    '来自m站自动化测试脚本',
                                    '在购物车购买书籍测试用例中%s账户余额不足,请及时充值' %
                                    (not_vip_username))
                                self.assertTrue(1 == 2)

                        except AssertionError as e:
                            logger.debug('购物车删除书籍,用例不通过!')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, execute_testResult, 'fail', 'red')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, execute_time,
                                str(time.time() - start_time) + 'ms', 'red')
                            TesShoppingCart.excelObj.write_cell_value(
                                idx + 2, book_isExecute, 'N')
                            raise e

                    except ElementNotVisibleException as e:
                        TesShoppingCart.excelObj.write_cell_value(
                            idx + 2, book_isExecute, 'N')
                        logger.error("数据问题,元素没有找到..")

                    except NoSuchElementException as e:

                        TesShoppingCart.excelObj.write_cell_value(
                            idx + 2, book_isExecute, 'N')
                        logger.error("数据问题..重试")

                    except Exception as e:
                        TesShoppingCart.excelObj.write_cell_value(
                            idx + 2, book_isExecute, 'N')
                        logger.error(e)

                        raise e
            else:
                continue
Пример #7
0
if __name__ == "__main__":
    from selenium import webdriver
    import time
    from util.SimulateLogin_galaxyS5 import simulator_login

    mobile_emulation = {'deviceName': 'Galaxy S5'}
    options = webdriver.ChromeOptions()
    options.add_experimental_option("mobileEmulation", mobile_emulation)
    browser = webdriver.Chrome(chrome_options=options)
    browser.get("https://plogin.m.jd.com/user/login.action")
    # 测试退出按钮
    LoginAction.login('你的用户名', '你的密码', browser,
                      'https://jdread.jd.com/h5/m/p_book_detail/30132192')
    # minePage=MinePage(browser)
    # minePage.ExitButtonObj().click()
    book_detail_page = BookDetailPage(browser)
    book_detail_page.catalogButton().click()
    time.sleep(2)
    catagoryPage = CatagoryPage(browser)
    time.sleep(2)
    print(catagoryPage.titleObj().is_displayed())
    print(catagoryPage.sortButton().is_displayed())
    # print(catagoryPage.canAccessChapters()[0].is_displayed())
    # print(catagoryPage.cannotAccessChapters()[0].is_displayed())
    print(catagoryPage.firstChapter().is_displayed())
    # time.sleep(2)
    # bookCityPage.toolButtonObj().click()

    time.sleep(2)
    browser.quit()
    def test_read_book_button(self):
        logger.info("开始执行书详页-阅读按钮脚本...")

        # 获取是否执行列
        isExecuteUser = testBookDetailNeedLogin.excelObj.get_col_values(
            book_isExecute, sheet_name='VIP逻辑验证书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            data_Type = testBookDetailNeedLogin.excelObj.get_cell_value(
                idx + 2, book_type)
            if 'Y' == i and "VIP_user_VIP_book" == data_Type:
                bookid = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_name)
                username = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_username_check_vip)
                password = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_password_check_vip)

                logger.info("执行测试数据:%s,%s,%s,%s" %
                            (bookid, bookname, username, password))

                try:

                    browser = webdriver.Chrome(chrome_options=options)

                    # 登陆
                    logger.info('登录操作执行...')
                    browser.get("https://plogin.m.jd.com/user/login.action")
                    LoginAction.login(username, password, browser,
                                      pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    bookDetailPage = BookDetailPage(browser)

                    read_button = bookDetailPage.readButton()
                    browser.execute_script("arguments[0].scrollIntoView();",
                                           read_button)

                    try:

                        self.assertIs(read_button.text == 'VIP免费读', True)
                        read_button.click()
                        time.sleep(2)
                        check_url = '%sstatic/read/dist/index.html?ebookId=%s&name=' % (
                            url, bookid) in browser.current_url
                        self.assertIs(check_url, True)
                        logger.info('执行书详页阅读按钮脚本成功!用例通过')

                    except AssertionError as e:
                        logger.debug('执行书详页-阅读按钮脚本失败!用例不通过')

                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            elif 'Y' == i and "VIP_user_VIP_book" != data_Type:
                bookid = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_name)
                username = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_username_check_vip)
                password = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_password_check_vip)

                logger.info("执行测试数据:%s,%s,%s,%s" %
                            (bookid, bookname, username, password))
                try:

                    browser = webdriver.Chrome(chrome_options=options)

                    # 登陆
                    logger.info('登录操作执行...')
                    browser.get("https://plogin.m.jd.com/user/login.action")
                    LoginAction.login(username, password, browser,
                                      pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    bookDetailPage = BookDetailPage(browser)

                    read_button = bookDetailPage.readButton()
                    browser.execute_script("arguments[0].scrollIntoView();",
                                           read_button)

                    try:

                        self.assertIs(read_button.text == '立即阅读', True)
                        read_button.click()
                        time.sleep(2)
                        check_url = '%sstatic/read/dist/index.html?ebookId=%s&name=' % (
                            url, bookid) in browser.current_url
                        self.assertIs(check_url, True)
                        logger.info('执行书详页阅读按钮脚本成功!用例通过')

                    except AssertionError as e:
                        logger.debug('执行书详页-阅读按钮脚本失败!用例不通过')

                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e

            else:
                continue
    def test_add_shop_cart_button(self):
        logger.info("开始执行书详页-加入购物车按钮脚本...")

        # 获取是否执行列
        isExecuteUser = testBookDetailNeedLogin.excelObj.get_col_values(
            book_isExecute, sheet_name='VIP逻辑验证书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            data_Type = testBookDetailNeedLogin.excelObj.get_cell_value(
                idx + 2, book_type)
            if 'Y' == i and "VIP_user_NVIP_book" == data_Type:
                bookid = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_name)
                username = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_username_check_vip)
                password = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_password_check_vip)

                logger.info("执行测试数据:%s,%s,%s,%s" %
                            (bookid, bookname, username, password))
                try:

                    browser = webdriver.Chrome(chrome_options=options)

                    # 登陆
                    logger.info('登录操作执行...')
                    browser.get("https://plogin.m.jd.com/user/login.action")
                    LoginAction.login(username, password, browser,
                                      pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    bookDetailPage = BookDetailPage(browser)

                    add_shopping_cart_button = bookDetailPage.shopCartButton()
                    browser.execute_script("arguments[0].scrollIntoView();",
                                           add_shopping_cart_button)

                    add_shopping_cart_button.click()
                    time.sleep(2)
                    add_shopping_cart_button.click()

                    try:

                        shopping_cart_page = ShoppingCartPage(browser)
                        first_book_in_shopping_cart = shopping_cart_page.shoppingCartBookListObj(
                        )[0].text
                        self.assertIs(bookname in first_book_in_shopping_cart,
                                      True)
                        shopping_cart_page.shoppingCartBookOptionListObj(
                        )[0].click()
                        shopping_cart_page.shoppingCartDeleteButton().click()
                        time.sleep(2)
                        shopping_cart_page.shoppingCartDeleteConfirmButton(
                        ).click()

                        logger.info('执行书详页加入购物车脚本成功!用例通过')

                    except AssertionError as e:
                        logger.debug('执行书详页-加入购物车脚本失败!用例不通过')

                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_book_write_comment_page(self):
        logger.info("开始执行书详页-写书评页面元素验证脚本...")

        #获取是否执行列
        isExecuteUser = testBookDetailNeedLogin.excelObj.get_col_values(
            book_isExecute, sheet_name='写书评验证书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            if 'Y' == i:
                bookid = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, catagory_book_id)
                bookname = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, catagory_book_name)
                username = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, catagory_acount_username)
                password = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, catagory_acount_password)
                bookauthor = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, catagory_book_author)

                logger.info("执行测试数据:%s,%s,%s,%s" %
                            (bookid, bookname, username, password))
                try:

                    browser = webdriver.Chrome(chrome_options=options)

                    # 登陆
                    logger.info('登录操作执行...')
                    browser.get("https://plogin.m.jd.com/user/login.action")
                    LoginAction.login(username, password, browser,
                                      pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')

                    bookDetailPage = BookDetailPage(browser)
                    bookDetailPage.writeBookCommentButton().click()
                    time.sleep(2)
                    writeCommentPage = WriteCommentPage(browser)

                    try:

                        self.assertIs(
                            writeCommentPage.titleObj().is_displayed(), True)
                        self.assertIs(
                            writeCommentPage.bookNameObj().text == bookname,
                            True)
                        a = writeCommentPage.bookAuthorObj().text + "[著]"
                        self.assertIs(a == bookauthor, True)
                        style = writeCommentPage.publishButtonText(
                        ).get_attribute("style")
                        #黑色color:rgb(222,219,214)
                        #红色:color:rgb(239,60,60)
                        #返回内容'color: rgb(222, 219, 214);'

                        logger.info('执行书详页-目录验证脚本成功!用例通过')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, catagory_execute_testResult, 'success',
                            'green')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, catagory_execute_time,
                            str(round(
                                (time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('执行书详页-目录验证脚本失败!用例不通过')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, catagory_execute_testResult, 'fail',
                            'red')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, catagory_execute_time,
                            str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_VIP_user_read_VIP_book(self):
        logger.info("开始执行书详页-VIP用户查看VIP书详页脚本...")

        #获取是否执行列
        isExecuteUser = testBookDetailNeedLogin.excelObj.get_col_values(
            book_isExecute, sheet_name='VIP逻辑验证书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            data_Type = testBookDetailNeedLogin.excelObj.get_cell_value(
                idx + 2, book_type)
            if 'Y' == i and "VIP_user_VIP_book" == data_Type:
                bookid = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_name)
                username = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_username_check_vip)
                password = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_password_check_vip)

                logger.info("执行测试数据:%s,%s,%s,%s" %
                            (bookid, bookname, username, password))
                try:

                    browser = webdriver.Chrome(chrome_options=options)

                    #登陆
                    logger.info('登录操作执行...')
                    browser.get("https://plogin.m.jd.com/user/login.action")
                    LoginAction.login(username, password, browser,
                                      pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    bookDetailPage = BookDetailPage(browser)
                    vip_price = bookDetailPage.vipOriginalPriceObj()
                    vip_read_button = bookDetailPage.vipReadButtonObj()
                    vip_read_button_text = bookDetailPage.vipReadButtonTextObj(
                    )
                    vip_read_for_free_text = bookDetailPage.vipReadForFreeTextObj(
                    )
                    vip_flag = bookDetailPage.vipFlagObj()

                    try:

                        self.assertIs(vip_read_for_free_text.is_displayed(),
                                      True)
                        self.assertIs(vip_read_button.is_displayed(), True)
                        self.assertIs("VIP免费读" == vip_read_button_text.text,
                                      True)
                        self.assertIs(vip_price.is_displayed(), True)
                        self.assertIs(vip_flag.is_displayed(), True)

                        logger.info('执行书详页-VIP用户查看VIP书详页脚本成功!用例通过')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_testResult, 'success', 'green')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_time,
                            str(round(
                                (time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('执行书详页-VIP用户查看VIP书详页脚本失败!用例不通过')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_testResult, 'fail', 'red')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_time,
                            str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_NVIP_user_read_NVIP_book(self):
        logger.info("开始执行书详页-NVIP用户查看NVIP书详页脚本...")

        #获取是否执行列
        isExecuteUser = testBookDetailNeedLogin.excelObj.get_col_values(
            book_isExecute, sheet_name='VIP逻辑验证书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            data_Type = testBookDetailNeedLogin.excelObj.get_cell_value(
                idx + 2, book_type)
            if 'Y' == i and "NVIP_user_NVIP_book" == data_Type:
                bookid = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_id)
                bookname = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, book_name)
                username = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_username_check_vip)
                password = testBookDetailNeedLogin.excelObj.get_cell_value(
                    idx + 2, acount_password_check_vip)

                logger.info("执行测试数据:%s,%s,%s,%s" %
                            (bookid, bookname, username, password))
                try:

                    browser = webdriver.Chrome(chrome_options=options)

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    browser.get(pc.getUrl('bookdetail') % (bookid))

                    bookDetailPage = BookDetailPage(browser)

                    read_button_text = bookDetailPage.readButtonTextObj()
                    price = bookDetailPage.realPriceObj()

                    try:

                        self.assertIs("立即阅读" == read_button_text.text, True)
                        self.assertIs(price.is_displayed(), True)
                        self.assertIs("VIP免费阅读" not in browser.page_source,
                                      True)
                        self.assertIs(
                            "开通VIP,免费阅读此书>" not in browser.page_source, True)

                        logger.info('执行书详页-NVIP用户查看NVIP书详页脚本成功!用例通过')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_testResult, 'success', 'green')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_time,
                            str(round(
                                (time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('执行书详页-NVIP用户查看NVIP书详页脚本失败!用例不通过')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_testResult_book_detail, 'fail',
                            'red')
                        testBookDetailNeedLogin.excelObj.write_cell_value(
                            idx + 2, execute_time_book_detail,
                            str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_price_sell_off_book(self):
        logger.info("开始执行书详页打折书价格脚本...")

        pc = ParseConfigFile()

        try:

            # books_data=getDataList('本周特价')
            testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookcity'))

            bookcityPage = BookCityPage(testBookDetailNotNeedLogin.browser)
            bookcityPage.channelFoldDownButton().click()
            time.sleep(2)

            bookcityPage.channelFeaturedButton().click()
            time.sleep(2)
            bookcityPage.discountButton().click()
            # time.sleep(2)
            # discountPage = DiscountPage(testBookDetailNotNeedLogin.browser)
            # discountPage.first_book().click()

            time.sleep(2)
            current_url=testBookDetailNotNeedLogin.browser.current_url
            collection_id=re.search(r'\d{4}',current_url).group(0)

            collection_data=CollectionDetail.getDataJson(collection_id)


            bookid=str(collection_data['data']['items'][0]['ebook_id'])

            testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))

            logger.info('启动浏览器,访问"书籍详情"页面...')
            bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
            real_price_obj = bookDetailPage.realPriceObj()
            original_price_obj=bookDetailPage.originalPriceObj()
            discount_obj=bookDetailPage.discountObj()
            # color=discount.get_attribute('color')


            api_realprice = str(BookDetai.getData(bookid)['jd_price'])
            api_price = str(BookDetai.getData(bookid)['price'])
            api_discount= str(BookDetai.getData(bookid)['discount'])

            real_price=str(int(round(float(real_price_obj.text.strip('¥')) * 100)))
            original_price=str(int(round(float(original_price_obj.text.strip('¥'))* 100)))
            discount= discount_obj.text

            try:

                self.assertIs(real_price_obj.is_displayed() and api_realprice == real_price, True)
                self.assertIs(original_price_obj.is_displayed() and api_price == original_price, True)
                self.assertIs(discount_obj.is_displayed() and api_discount == discount, True)

                logger.info('书详页折扣书价格脚本执行成功!用例通过')

            except AssertionError as e:
                logger.debug('书详页折扣书价格脚本执行失败!用例通过')

                raise e

        except ElementNotVisibleException as e:

            logger.error("数据问题,元素没有找到..")

        except NoSuchElementException as e:

            logger.error("数据问题..重试")

        except Exception as e:

            logger.error(e)

            raise e
    def test_book_messages(self):
        logger.info("开始执行书详页图书信息脚本...")

        pc = ParseConfigFile()

        try:

            ebookid='30331055'

            testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (ebookid))

            logger.info('启动浏览器,访问"书籍详情"页面...')
            bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)

            api_book_message={}.fromkeys(['file_size','isbn','publish_time','word_count','format','edition'])
            api_book_message['file_size']=str(BookDetai.getData(ebookid)['file_size'])+'M'
            api_book_message['isbn']=BookDetai.getData(ebookid)['isbn']
            api_book_message['publish_time']=BookDetai.getData(ebookid)['publish_time']
            api_book_message['word_count']=str(round(BookDetai.getData(ebookid)['word_count']/10000,1))+'万'
            api_book_message['format']=BookDetai.getData(ebookid)['format']
            api_book_message['edition']=str(BookDetai.getData(ebookid)['edition'])

            book_Message_Title=bookDetailPage.bookMessageTitle()
            testBookDetailNotNeedLogin.browser.execute_script("arguments[0].scrollIntoView();", book_Message_Title)
            book_File_Size_Label=bookDetailPage.bookFileSizeLabel()
            book_File_Size_Obj=bookDetailPage.bookFileSizeObj()
            book_File_Type_Label=bookDetailPage.bookFileTypeLabel()
            book_File_Type_Obj=bookDetailPage.bookFileTypeObj()
            book_ISBN_Code_Label=bookDetailPage.bookISBNCodeLabel()
            book_ISBN_Code_Obj=bookDetailPage.bookISBNCodeObj()
            book_Chars_Num_Label=bookDetailPage.bookCharsNumLabel()
            book_Chars_Num_Obj=bookDetailPage.bookCharsNumObj()
            book_Public_Time_Label=bookDetailPage.bookPublicTimeLabel()
            book_Public_Time_Obj=bookDetailPage.bookPublicTimeObj()
            book_Public_Times_Label=bookDetailPage.bookPublicTimesLabel()
            book_Public_Times_Obj=bookDetailPage.bookPublicTimesObj()


            try:

                self.assertIs(book_Message_Title.is_displayed(), True)
                self.assertIs(book_File_Size_Label.is_displayed(), True)
                self.assertIs(book_File_Type_Label.is_displayed(), True)
                self.assertIs(book_ISBN_Code_Label.is_displayed(), True)
                self.assertIs(book_Chars_Num_Label.is_displayed(), True)
                self.assertIs(book_Public_Time_Label.is_displayed(), True)
                self.assertIs(book_Public_Times_Label.is_displayed(), True)
                self.assertIs(api_book_message['file_size'] in book_File_Size_Obj.text, True)
                self.assertIs(api_book_message['isbn'] in book_ISBN_Code_Obj.text, True)
                self.assertIs(api_book_message['publish_time'] in book_Public_Time_Obj.text, True)
                self.assertIs(api_book_message['word_count'] in book_Chars_Num_Obj.text, True)
                self.assertIs(api_book_message['format'] in book_File_Type_Obj.text, True)
                self.assertIs(api_book_message['edition'] in book_Public_Times_Obj.text+'未知', True)

                logger.info('书详页相关图书推荐脚本执行成功!用例通过')

            except AssertionError as e:
                logger.debug('书详页相关图书推荐脚本执行失败!用例通过')

                raise e

        except ElementNotVisibleException as e:

            logger.error("数据问题,元素没有找到..")

        except NoSuchElementException as e:

            logger.error("数据问题..重试")

        except Exception as e:

            logger.error(e)

            raise e
    def test_book_detail_comment(self):
        logger.info("开始执行书详页-书评列表验证脚本...")

        # 获取是否执行列
        isExecuteUser = testBookDetailNotNeedLogin.excelObj.get_col_values(book_isExecute, sheet_name='书详页书评验证书籍')
        pc = ParseConfigFile()

        for idx, i in enumerate(isExecuteUser[1:]):
            start_time = time.time()
            if 'Y' == i:
                bookid = testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, catagory_book_id)
                bookname = testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, catagory_book_name)
                username = testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, catagory_acount_username)
                password = testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, catagory_acount_password)

                logger.info("执行测试数据:%s,%s,%s,%s" % (bookid, bookname, username, password))
                try:

                    testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))

                    logger.info('启动浏览器,访问"书详页"页面...')
                    book_detail_page=BookDetailPage(testBookDetailNotNeedLogin.browser)
                    comment_title=book_detail_page.commentTitleObj()
                    testBookDetailNotNeedLogin.browser.execute_script("arguments[0].scrollIntoView();", comment_title)

                    api_comments=GetTwentycomments.getCommentsByPopular(bookid)
                    api_comments_num=len(api_comments)

                    try:

                        if api_comments_num == 0:
                            no_comment_text = book_detail_page.noCommentTextObj()
                            self.assertIs(no_comment_text.is_displayed(), True)

                        else:

                            if api_comments_num > 3:
                                all_comments_text=book_detail_page.allCommentsTextObj()
                                self.assertIs(all_comments_text.is_displayed(), True)

                            first_comment_user_head=book_detail_page.commentUserHeadImg()
                            first_comment_user_name=book_detail_page.commentUserNameObj()
                            first_comment_user_level=book_detail_page.commentUserLevelObj()
                            first_comment_content=book_detail_page.commentContentObj()
                            first_comment_time=book_detail_page.commentTimeObj()
                            check_result=first_comment_user_head.is_displayed() and \
                                         first_comment_user_name.is_displayed()and \
                                        first_comment_user_level.is_displayed() and \
                                        first_comment_content.is_displayed() and \
                                        first_comment_time.is_displayed()
                            self.assertIs(check_result, True)

                        logger.info('执行书详页-书评列表验证脚本成功!用例通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, catagory_execute_testResult, 'success',
                                                                 'green')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, catagory_execute_time,
                                                                             str(round((time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('执行书详页-书评列表验证脚本失败!用例不通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, catagory_execute_testResult, 'fail', 'red')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, catagory_execute_time,
                                                                             str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_book_cover_author_publish_recmmand_name(self):
        logger.info("开始执行书详页-书籍封面、书名、作者和出版社脚本...")

        #获取是否执行列
        isExecuteUser=testBookDetailNotNeedLogin.excelObj.get_col_values(book_isExecute_book_detail, sheet_name='基本信息验证书籍')
        pc = ParseConfigFile()

        for idx,i in enumerate(isExecuteUser[1:]):
            start_time=time.time()
            data_Type=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_type)
            if 'Y'==i :
                bookid=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_id)
                bookname=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_name)
                bookAuthor=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_author)
                bookPublish=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_publish)

                logger.info("执行测试数据:%s,%s,%s,%s"%(bookid,bookname,bookAuthor,bookPublish))
                try:

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))

                    bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
                    book_cover_obj=bookDetailPage.bookCoverObj()
                    book_publish_obj=bookDetailPage.publishObj()
                    book_author_obj=bookDetailPage.authorObj()
                    book_name_obj=bookDetailPage.bookNameObj()
                    book_recommand_obj=bookDetailPage.foldRecommandObj()

                    try:

                        self.assertIs(book_cover_obj.is_displayed(),True)
                        self.assertIs(book_publish_obj.text.strip(string.whitespace)==bookPublish.strip(string.whitespace),True)
                        self.assertIs(book_author_obj.text.strip(string.whitespace)==bookAuthor.strip(string.whitespace),True)
                        self.assertIs(book_name_obj.text.strip(string.whitespace)==bookname.strip(string.whitespace),True)
                        self.assertIs(book_recommand_obj.is_displayed(),True)

                        logger.info('执行书详页-书籍封面、书名、作者和出版社脚本成功!用例通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult_book_detail, 'success', 'green')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time_book_detail, str(round((time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('执行书详页--书籍封面、书名、作者和出版社脚本失败!用例不通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult_book_detail, 'fail', 'red')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time_book_detail, str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue
    def test_book_comment(self):
        logger.info("开始执行书详页-书籍评论脚本...")

        #获取是否执行列
        isExecuteUser=testBookDetailNotNeedLogin.excelObj.get_col_values(book_isExecute_book_detail, sheet_name='基本信息验证书籍')
        pc = ParseConfigFile()

        for idx,i in enumerate(isExecuteUser[1:]):
            start_time=time.time()
            data_Type=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_type)
            if 'Y'==i :
                bookid=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_id)
                bookname=testBookDetailNotNeedLogin.excelObj.get_cell_value(idx + 2, book_name)

                logger.info("执行测试数据:%s,%s"%(bookid,bookname))
                try:

                    logger.info('启动浏览器,访问"书籍详情"页面...')
                    testBookDetailNotNeedLogin.browser.get(pc.getUrl('bookdetail') % (bookid))
                    bookDetailPage = BookDetailPage(testBookDetailNotNeedLogin.browser)
                    api_book_comment_stars_count = int(BookDetai.getData(bookid)['star'])
                    api_book_comment_count = int(BookDetai.getData(bookid)['comment_count'])

                    try:
                        if api_book_comment_count > 0:

                            book_comment_stars_obj = bookDetailPage.activeCommentStarObj()
                            book_comment_count_obj = bookDetailPage.commentCountObj()
                            book_comments_count = int(
                                re.search(r'\d+', book_comment_count_obj.text.strip(string.whitespace)).group())

                            self.assertIs(api_book_comment_stars_count==len(book_comment_stars_obj),True)
                            self.assertIs(api_book_comment_count==book_comments_count,True)
                        else:
                            book_comment_text=bookDetailPage.commentCountObj().text
                            self.assertIs("暂无评分"==book_comment_text,True)

                        logger.info('执行书详页-书籍评论脚本成功!用例通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult_book_detail, 'success', 'green')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time_book_detail, str(round((time.time() - start_time) / 1000, 2)) + 's')

                    except AssertionError as e:
                        logger.debug('执行书详页-书籍评论脚本失败!用例不通过')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_testResult_book_detail, 'fail', 'red')
                        testBookDetailNotNeedLogin.excelObj.write_cell_value(idx + 2, execute_time_book_detail, str(time.time() - start_time) + 'ms', 'red')
                        raise e

                except ElementNotVisibleException as e:

                    logger.error("数据问题,元素没有找到..")

                except NoSuchElementException as e:

                    logger.error("数据问题..重试")

                except Exception as e:

                    logger.error(e)

                    raise e
            else:
                continue