示例#1
0
class BoPlacementSet(unittest.TestCase):
    def setUp(self):
        self.conf = BoInitialize()
        self.driver = self.conf.login()
        self.verificationErrors = []
        pass

    def tearDown(self):
        self.conf.getScreenshot(self)
        self.assertEqual([], self.verificationErrors)
        self.driver.quit()
        pass

    # 自动安置功能
    def testBoPlacementSet(self):
        driver = self.driver
        conf = self.conf
        # 切换语言
        conf.boLangChange(driver, 'zh_CN')
        driver.implicitly_wait(5)

        num = ranNo(0, 2)
        if num != 0:
            # 打开我的账户-设置
            driver.find_element_by_xpath('//ul[@id="mainmenu"]/li[5]/a').click()
            time.sleep(2)
            driver.find_element_by_id('8100').click()
            driver.implicitly_wait(5)

            # 修改密码
            driver.execute_script('scrollTo(0,1000)')
            driver.find_element_by_id('emailId').clear()
            driver.find_element_by_id('emailId').send_keys('*****@*****.**')
            driver.find_element_by_id('passwordId').send_keys('123456')
            driver.find_element_by_id('confirmNewPasswordId').send_keys('123456')
            driver.find_element_by_xpath('//div[@id="tab_1_1"]/div[3]/div/div/button[1]').click()
            time.sleep(2)

            # 关闭提示弹框
            driver.switch_to_alert().accept()
            time.sleep(2)

            # 退出重新登录
            # driver.find_element_by_class_name('username-hide-mobile').click()
            if conf.env == 'sandbox':
                driver.get('https://sandbox-d-v1.jmtop.com/backOffice/logout')
            elif conf.env == 'production':
                driver.get('https://dist.jmtop.com/backOffice/logout')
            driver.implicitly_wait(10)
            driver.find_element_by_id('password').send_keys('123456')
            time.sleep(2)

            driver.find_element_by_id('btnLogin').click()
            driver.implicitly_wait(5)

        # 打开我的业务-安置网系谱
        driver.find_element_by_xpath('//ul[@id="mainmenu"]/li[2]').click()
        driver.implicitly_wait(10)
        driver.find_element_by_id('8078').click()
        time.sleep(2)

        # 点击安置设置
        driver.find_element_by_id('placementSettingBtn').click()
        time.sleep(2)

        # 随机设置
        driver.find_elements_by_id('placementSetting')[num].click()
        time.sleep(2)

        # 点击保存
        driver.find_element_by_id('placementSettingFormBtn').click()
        driver.implicitly_wait(5)

        # 输入登录密码
        if num != 0:
            driver.find_element_by_id('first-time-psw').send_keys('123456')
            driver.find_element_by_id('placementSettingAgreeBtn').click()
            driver.implicitly_wait(5)
            driver.find_element_by_id('second-time-psw').send_keys('123456')
            driver.find_element_by_id('placementSettingRepeatOK').click()
            driver.implicitly_wait(5)

        # 当前登录的会员
        member = conf.member
        member_id = member['ID']

        # 断言
        value = Oradao.sqlDiy(Oradao(), 'select * from MM_MEMBER_CHANGE c where c.member_id=' + str(member_id) + 'and c.operate_type=50 order by c.create_date desc')['NEW_VALUE'][0]
        self.assertEqual(num, int(value))
示例#2
0
 def setUp(self):
     self.conf = BoInitialize()
     self.driver = self.conf.login()
     self.verificationErrors = []
     pass
示例#3
0
class BoPlacement(unittest.TestCase):
    def setUp(self):
        self.conf = BoInitialize()
        self.driver = self.conf.login()
        self.verificationErrors = []
        pass

    def tearDown(self):
        self.conf.getScreenshot(self)
        self.assertEqual([], self.verificationErrors)
        self.driver.quit()
        pass

    def testBoPlacement(self):
        driver = self.driver
        conf = self.conf
        # 切换语言
        conf.boLangChange(driver, 'zh_CN')
        # 声明member对象
        member = conf.member

        time.sleep(5)

        # 打开我的业务-安置网
        driver.find_element_by_xpath('//ul[@id="mainmenu"]/li[2]/a').click()
        driver.find_element_by_id('8077').click()

        # 当前会员ID
        member_id = member['ID']

        # 从页面获取该会员的各明细信息
        member_no = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('memberno')
        member_status = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('memberstatustext')
        member_son = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('memberson')
        member_grade = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('membergradetext')
        order_date = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('firstorderbonusdate')
        member_name = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('membername')
        member_sponsorno = driver.find_element_by_id('memberDetail_'+str(member_id)).get_attribute('membersponsorno')

        # 断言明细信息
        self.assertEqual(member_no, member['MEMBER_NO'])
        self.assertEqual(member_status, transData('member.status').get(member['STATUS']))
        self.assertEqual(member_name, member['NAME'][0:19])
        if order_date == '':
            self.assertEqual(order_date, member['JOIN_DATE'])
        else:
            self.assertEqual(order_date, member['JOIN_DATE'].strftime('%Y-%m-%d'))
        sponsor_no = Oradao.sqlDiy(Oradao(),
                                  'select * from mm_member m where m.id=(select m.sponsor_id from mm_member m where m.member_no=\''+member['MEMBER_NO']+'\')')
        self.assertEqual(member_sponsorno, sponsor_no['MEMBER_NO'][0])
        self.assertEqual(member_grade, transData('member.enrollmentGrade').get(member['ENROLLMENT_GRADE']))

        # 判断当前会员是否有安置下线,有则对下线编号进行断言
        if member_son > '0':
            # 数据库取安置下线
            son_no = Oradao.sqlDiy(Oradao(),
                                     'select * from mm_member m where m.placement_id=(select m.id from mm_member m where m.member_no=\''+member['MEMBER_NO']+'\') order by m.member_no asc')
            num = son_no['ID'].__len__()
            # 循环取下线编号进行断言
            for i in range(0, num):
                member_sonId = son_no['ID'][i]
                member_sonNo = driver.find_element_by_id('memberDetail_'+str(member_sonId)).get_attribute('memberno')
                self.assertEqual(member_sonNo, son_no['MEMBER_NO'][i])
示例#4
0
class BoOrderSave(unittest.TestCase):
    def setUp(self):
        self.conf = BoInitialize()
        self.driver = self.conf.login()
        self.verificationErrors = []
        pass

    def tearDown(self):
        self.conf.getScreenshot(self)
        self.assertEqual([], self.verificationErrors)
        self.driver.quit()
        pass

    # bo004 & bo006 下单&支付
    def testBoOrderSave(self):
        driver = self.driver
        conf = self.conf
        # 切换语言
        conf.boLangChange(driver, 'zh_CN')
        # 声明member对象
        member = conf.member
        time.sleep(2)

        # 打开订单-我要下单
        driver.find_element_by_xpath('//ul[@id="mainmenu"]/li[4]/a').click()
        time.sleep(2)
        driver.find_element_by_id('8091').click()
        driver.implicitly_wait(5)

        # 当前会员编号/级别
        member_no = member['MEMBER_NO']
        member_grade = member['ENROLLMENT_GRADE']

        # 下单
        if member_grade == '0':
            order_status = driver.find_element_by_xpath(
                '//form[@id="storeForm10"]/div/div/ul/li').text[-3:]
            # 当存在首购单待支付,则先支付再下升级或重消单
            if order_status == u'待支付':
                # 订单号
                order_no = driver.find_element_by_xpath(
                    '//form[@id="storeForm10"]/div/div/ul/li').text[0:16]

                # 订单金额
                order_amount = Oradao.sqlDiy(
                    Oradao(), 'select * from om_orders o where o.doc_no=\'' +
                    order_no + '\'')['TOTAL_NET_AMOUNT'][0]
                # 会员电子钱包余额
                wm_value = Oradao.sqlDiy(
                    Oradao(),
                    'select * from wm_finance_info f where f.account=\'' +
                    member_no +
                    '\'and f.ewallet_type=1')['TOTAL_EWALLET_VALUE'][0]

                # 电子钱包充值
                if order_amount > wm_value:
                    self.wm_fund_in()

                # 点击我的订单
                driver.find_element_by_xpath(
                    '//ul[@id="mainmenu"]/li[4]/a').click()
                time.sleep(2)
                driver.find_element_by_id('28718').click()
                driver.implicitly_wait(5)

                # 查询待支付订单
                driver.find_element_by_name('sp_docNo_LIKE').send_keys(
                    order_no)
                driver.find_element_by_id('btnSubmit').click()
                time.sleep(2)

                # 去支付
                driver.find_element_by_xpath(
                    '//table[@id="contentTable"]/tbody/tr/td[8]/a[1]').click()
                time.sleep(2)

                # 支付操作
                driver.switch_to_frame('payIframe')
                self.pay()

                # 首购支付完成,重新进入 我要下单
                driver.find_element_by_xpath(
                    '//ul[@id="mainmenu"]/li[4]/a').click()
                time.sleep(2)
                driver.find_element_by_id('8091').click()
                driver.implicitly_wait(5)

                # 完成首购支付后,进行升级/重消单操作
                self.order()

            # 不存在待支付首购单,直接进行首购单操作
            else:
                self.order()

        # 下升级/重消单
        else:
            self.order()

    def order(self):
        driver = self.driver
        conf = self.conf
        member = conf.member
        member_no = member['MEMBER_NO']
        member_id = member['ID']

        # 会员级别
        member_grade = Oradao.sqlDiy(
            Oradao(), 'select * from mm_member m where m.member_no=\'' +
            member_no + '\'')['ENROLLMENT_GRADE'][0]

        # 会员电子钱包余额
        wm_value = Oradao.sqlDiy(
            Oradao(), 'select * from wm_finance_info f where f.account=\'' +
            member_no + '\'and f.ewallet_type=1')['TOTAL_EWALLET_VALUE'][0]

        # 下单-根据当前会员级别,确定下单类型
        if member_grade == '0':
            # 点击下首购单
            order_type = 10
            driver.find_element_by_xpath(
                '//form[@id="storeForm10"]/div/div/div[3]/a').click()

        elif member_grade == '40':
            # 点击下重消单
            order_type = 30
            driver.find_element_by_xpath(
                '//form[@id="storeForm30"]/div/div/div[3]/a').click()

        else:
            num = ranNo(2, 3)
            # 随机下升级或重消单
            driver.find_element_by_xpath('//form[@id="storeForm' + str(num) +
                                         '0"]/div/div/div[3]/a').click()
            if num == 2:
                order_type = 20
            else:
                order_type = 30

        # 购物车商品数量,非0时,先清空
        # count = driver.find_element_by_xpath('//div[@id="spc-tooltip"]/span').text
        shopping = Oradao.sqlDiy(
            Oradao(), 'select * from BO_SHOPPING_CART s where s.member_id=' +
            str(member_id) + 'and s.order_type=' + str(order_type))
        count = shopping['ID'].__len__() - 1
        if count != '0':
            # 鼠标移动到购物车上
            chain = ActionChains(driver)
            chain.move_to_element(
                driver.find_element_by_id('spc-tooltip')).perform()
            driver.implicitly_wait(10)
            # 清空购物车
            for i in range(0, count + 1):
                driver.find_element_by_xpath('//li[@id="li' +
                                             str(shopping['ID'][i]) +
                                             '"]/div[3]/a').click()
            driver.implicitly_wait(10)

        # 数据库取商品
        product = Oradao.sqlDiy(
            Oradao(),
            'select p.id,p.product_id,pm.product_no,p.bv from pm_product_sale p,pm_product pm where pm.id=p.product_id and pm.product_type=\'10\' and p.order_type='
            + str(order_type) + ' and p.company_code=\'' + conf.state +
            '\' and p.del_flag=\'20\'')

        # 循环把商品加入购物车,直到满足下单的bv数
        bv = 0
        if order_type == 10:
            while bv < 50:
                product_num = ranNo(0, product['ID'].__len__() - 1)
                product_no = product['PRODUCT_NO'][product_num]
                product_id = product['ID'][product_num]
                # 输入商品编码-点击查询
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').send_keys(product_no)
                driver.find_element_by_id('btnSearch').click()
                time.sleep(2)
                # 加入购物车
                driver.find_element_by_id('cart' + str(product_id)).click()
                time.sleep(2)
                bv = bv + product['BV'][product_num]
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').clear()

        elif order_type == 20 and member_grade == '10':
            while bv < 300:
                product_num = ranNo(0, product['ID'].__len__() - 1)
                product_no = product['PRODUCT_NO'][product_num]
                product_id = product['ID'][product_num]
                # 输入商品编码-点击查询
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').send_keys(product_no)
                driver.find_element_by_id('btnSearch').click()
                time.sleep(2)
                # 加入购物车
                driver.find_element_by_id('cart' + str(product_id)).click()
                time.sleep(2)
                bv = bv + product['BV'][product_num]
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').clear()

        elif order_type == 20 and member_grade == '20':
            while bv < 400:
                product_num = ranNo(0, product['ID'].__len__() - 1)
                product_no = product['PRODUCT_NO'][product_num]
                product_id = product['ID'][product_num]
                # 输入商品编码-点击查询
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').send_keys(product_no)
                driver.find_element_by_id('btnSearch').click()
                time.sleep(2)
                # 加入购物车
                driver.find_element_by_id('cart' + str(product_id)).click()
                time.sleep(2)
                bv = bv + product['BV'][product_num]
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').clear()

        elif order_type == 20 and member_grade == '30':
            while bv < 500:
                product_num = ranNo(0, product['ID'].__len__() - 1)
                product_no = product['PRODUCT_NO'][product_num]
                product_id = product['ID'][product_num]
                # 输入商品编码-点击查询
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').send_keys(product_no)
                driver.find_element_by_id('btnSearch').click()
                time.sleep(2)
                # 加入购物车
                driver.find_element_by_id('cart' + str(product_id)).click()
                time.sleep(2)
                bv = bv + product['BV'][product_num]
                driver.find_element_by_name(
                    'sp_product.productNo_LIKE').clear()

        else:
            product_num = ranNo(0, product['ID'].__len__() - 1)
            product_no = product['PRODUCT_NO'][product_num]
            product_id = product['ID'][product_num]
            # 输入商品编码-点击查询
            driver.find_element_by_name('sp_product.productNo_LIKE').send_keys(
                product_no)
            driver.find_element_by_id('btnSearch').click()
            time.sleep(2)
            # 加入购物车
            driver.find_element_by_id('cart' + str(product_id)).click()
            time.sleep(2)

        # 结算
        if conf.env == 'sandbox':
            driver.get(
                'https://sandbox-d-v1.jmtop.com/backOffice/order/goToShoppingCart'
            )
        elif conf.env == 'production':
            driver.get(
                'https://dist.jmtop.com/backOffice/order/goToShoppingCart')
        driver.implicitly_wait(10)
        driver.find_element_by_id('addToCart_' + str(order_type)).click()
        time.sleep(2)

        # 判断是否有收货地址,若有则随机选择一个收货地址,没则选择自提
        address = Oradao.sqlDiy(
            Oradao(),
            'select * from mm_member_address ma where ma.member_id in (select m.id from mm_member m where m.member_no=\''
            + member_no + '\') and ma.country=' + getAreaIdByCode(conf.state))
        address_len = address['ID'].__len__()
        if address_len > 0:
            address_num = ranNo(0, address_len - 1)
            address_id = address['ID'][address_num]
            driver.find_element_by_xpath('//tr[@id="' + str(address_id) +
                                         '_tr"]/td[1]/input').click()
        else:
            driver.find_element_by_id('isSelfPickup').click()

        # 订单金额
        order_amount = float(
            driver.find_element_by_id('subTotal').text.replace(',', ''))

        # 电子钱包充值
        if order_amount > wm_value:
            self.wm_fund_in()

        # 点击保存
        driver.implicitly_wait(10)
        driver.execute_script('scrollTo(0,500)')
        driver.find_element_by_id('btnSubmit').click()

        # 订单信息页-点击保存
        driver.implicitly_wait(10)
        driver.execute_script('scrollTo(0,500)')
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)

        # 支付操作
        driver.switch_to_frame('payIframe')
        self.pay()

        # 点击我的订单
        driver.find_element_by_xpath('//ul[@id="mainmenu"]/li[4]/a').click()
        driver.find_element_by_id('28718').click()
        time.sleep(2)

        # 页面按订单号排序
        driver.find_element_by_xpath(
            '//table[@id="contentTable"]/thead/tr/th[1]').click()
        time.sleep(2)
        driver.find_element_by_xpath(
            '//table[@id="contentTable"]/thead/tr/th[1]').click()
        time.sleep(2)

        # 页面取新订单号
        rs_doc_no = driver.find_element_by_xpath(
            '//table[@id="contentTable"]/tbody/tr[1]/td[1]/a').text

        # 数据库取新订单号
        order = Oradao.sqlDiy(
            Oradao(), 'select * from om_orders o where o.member_id =\'' +
            str(member_id) + '\'order by o.doc_no desc')

        # 断言
        self.assertEqual(rs_doc_no, order['DOC_NO'][0])

    def wm_fund_in(self):
        driver = self.driver
        conf = self.conf
        member = conf.member
        member_no = member['MEMBER_NO']

        # 切换到原始窗口(oss窗口)
        driver.switch_to_window(driver.window_handles[0])
        driver.implicitly_wait(10)
        # 选择运营支撑平台
        driver.switch_to_default_content()
        driver.find_element_by_id('topMenu_1100').click()
        # 鼠标悬停在电子钱包上
        chain = ActionChains(driver)
        chain.move_to_element(
            driver.find_element_by_id('left_menu_73')).perform()
        driver.implicitly_wait(10)
        driver.find_element_by_xpath('//li[@id="left_menu_85"]/a/span').click()
        chain.move_to_element(
            driver.find_element_by_class_name('nav-header')).perform()
        driver.implicitly_wait(10)
        # 切换至iframe
        driver.switch_to_frame('contentIframe85')
        # 点击添加
        driver.find_elements_by_id('btnSubmit')[1].click()
        time.sleep(2)
        # 选择钱包账户
        driver.find_element_by_id('selectAccount').click()
        driver.switch_to_frame('jbox-iframe')
        driver.find_element_by_name('sp_memberCode_like').send_keys(member_no)
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)
        driver.find_element_by_xpath(
            '//table[@id="treeTable1"]/tbody/tr/td[1]/a').click()
        # 输入充值金额
        driver.switch_to_default_content()
        driver.switch_to_frame('contentIframe85')
        driver.find_element_by_id('ewalletValue').clear()
        driver.find_element_by_id('ewalletValue').send_keys(999999)
        # 选择账户类型为电子钱包
        driver.find_element_by_xpath(
            '//div[@id="s2id_autogen1"]/a/div/b').click()
        Select(driver.find_element_by_name("ewalletType")).select_by_index(1)
        # 备注
        driver.find_element_by_id('remark').send_keys(u'充值')
        # 保存
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)
        # 审核
        driver.find_element_by_id('sp_financeInfo.memberCode_LIKE').send_keys(
            member_no)
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)
        driver.find_element_by_xpath(
            '//table[@id="contentTable"]/tbody/tr/td[13]/a[3]').click()
        time.sleep(2)
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)
        # 切换到bo窗口
        driver.switch_to_window(driver.window_handles[1])
        driver.implicitly_wait(10)

    # 支付
    def pay(self):
        driver = self.driver

        # 选择电子钱包付款
        driver.find_element_by_name('payType').click()

        # 输入支付密码
        driver.find_element_by_id('paypwd').send_keys('123456')

        # 点击支付
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)

        # 跳出支付iframe
        driver.switch_to_default_content()
示例#5
0
class BoRegister(unittest.TestCase):
    def setUp(self):
        self.conf = BoInitialize()
        self.driver = self.conf.login()
        self.verificationErrors = []
        pass

    def tearDown(self):
        self.conf.getScreenshot(self)
        self.assertEqual([], self.verificationErrors)
        logging.info(self.driver.page_source)
        self.driver.quit()
        pass

    def testBoRegister(self):
        driver = self.driver
        conf = self.conf
        member = conf.member

        # 切换语言
        conf.boLangChange(driver, 'zh_CN')

        driver.find_element_by_link_text('注册').click()
        driver.implicitly_wait(10)
        web_sponsor = driver.find_element_by_class_name('sponsor').text
        # 1.判断推荐人和当前用户是否一致
        self.assertEquals(member['NAME'], web_sponsor)

        driver.find_element_by_xpath(
            '//div[@class="modal-footer"]/button[1]').click()
        time.sleep(2)
        # 2.选择国家
        company = driver.find_element_by_css_selector('a[companycode="' +
                                                      conf.state + '"]')
        company.click()
        time.sleep(2)

        # 选择语言,排除掉选择不同国家选项
        lang = driver.find_elements_by_xpath(
            '//div[@id="myLangModal-' + company.get_attribute('companyid') +
            '"]/div/div/div[2]/a')
        lang_num = ranNo(0, lang.__len__() - 2)
        lang[lang_num].click()

        # 点击下一步
        driver.implicitly_wait(10)
        driver.find_element_by_id('next').click()

        driver.implicitly_wait(10)
        # 3.下首购单
        # 优先选择单品
        product_sale_sql = '''
            SELECT *
            FROM (
               SELECT pps.*
               FROM pm_product_sale pps, pm_product pp
               WHERE pps.PRODUCT_ID = pp.ID
               AND pps.order_type = '%s'
               AND pps.company_code = '%s'
               AND pps.price > 0
               AND pps.price < 500
               AND pps.del_flag = '20'
               AND pp.PRODUCT_TYPE = '10'
               ORDER BY pps.sort_num )
            WHERE ROWNUM <= 10
            '''
        product_sale = Oradao().sqlDiy(product_sale_sql % (10, conf.state))
        if product_sale['ID'].__len__() > 0:
            ran_item = ranNo(0, product_sale['ID'].__len__() - 1)
            product_sale_id = product_sale['ID'][ran_item]
        else:
            raise Exception(u'数据库中无符合要求的单品')
        productitem = driver.find_element_by_css_selector(
            'input[productsaleid="' + str(product_sale_id) + '"]')
        productitem.send_keys('1')

        # 点击任意地方获取当前BV
        driver.find_element_by_id('grade_distributor').click()
        time.sleep(1)
        total_bv = int(
            driver.find_element_by_id(
                'showOrderUl').find_element_by_class_name('amount').text)
        # 判断总BV是否满足50,否则重新设置数量
        if total_bv >= 50:
            driver.find_element_by_id('next').click()
        else:
            productitem.clear()
            time.sleep(1)
            productitem.send_keys(50 // total_bv + 1)
            driver.find_element_by_id('grade_distributor').click()
            driver.find_element_by_id('next').click()

        # 4.设置自动重消单
        product_sale = Oradao().sqlDiy(product_sale_sql % (30, conf.state))
        if product_sale['ID'].__len__() > 0:
            ran_item = ranNo(0, product_sale['ID'].__len__() - 1)
            product_sale_id = product_sale['ID'][ran_item]
        else:
            raise Exception(u'数据库中无符合要求的单品')
        time.sleep(2)
        productitem = driver.find_element_by_css_selector(
            'input[productsaleid="' + str(product_sale_id) + '"]')
        productitem.send_keys(ranNo(0, 3))
        driver.find_element_by_id('next').click()

        # 5.填写个人信息
        driver.implicitly_wait(10)
        # 性别
        sex_el = driver.find_elements_by_name('sex')[ranNo(
            0,
            driver.find_elements_by_name('sex').__len__() - 1)]
        web_sex = sex_el.get_attribute('value')
        sex_el.click()
        # 姓名
        web_name = ranEN(5)
        driver.find_element_by_id('name').send_keys(web_name)
        # 生日
        web_birthday = '19' + str(ranNo(10, 99)) + '-0' + str(ranNo(
            1, 9)) + '-' + str(ranNo(10, 28))
        driver.find_element_by_id('birthDay').send_keys(web_birthday)
        # 选择国籍
        web_nation = random_select_by_id(driver, 'nationalityId',
                                         1).get_attribute('value')
        # 选择语言
        web_lang = random_select_by_id(driver, 'languageCode', 1)
        # 选择注册类型
        web_regist = random_select_by_id(driver, 'registrationType', 1)
        if web_regist.text == u'公司' or web_regist.text == u'company':
            driver.find_element_by_id('company').send_keys(ranEN(5))
        # 日间电话
        web_day_phone = str(ranNo(10000000000, 13999999999))
        driver.find_element_by_id('daytimePhone').send_keys(web_day_phone)
        # 晚间电话
        web_night_phone = str(ranNo(10000000000, 13999999999))
        driver.find_element_by_id('eveningPhone').send_keys(web_night_phone)
        # 电话
        web_phone = str(ranNo(10000000000, 13999999999))
        driver.find_element_by_id('mobilePhone').send_keys(web_phone)
        # 邮箱
        web_mail = ranEN(6) + '@' + ranEN(2) + '.com'
        driver.find_element_by_id('email').send_keys(web_mail)
        # 国家
        web_country = random_select_by_id(driver, 'homeAddress.countryId', 1)
        # 省份
        time.sleep(2)
        # 有可能选到没有省份的国家,故选择两次
        try:
            web_province = random_select_by_id(driver,
                                               'homeAddress.provinceId', 1)
        except:
            web_province = random_select_by_id(driver,
                                               'homeAddress.provinceId', 1)
        # 城市
        web_city = ranEN(4)
        driver.find_element_by_id('homeAddress.cityName').send_keys(web_city)
        # 邮编
        web_postcode = str(ranNo(100000, 999999))
        driver.find_element_by_id('homeAddress.postalCode').send_keys(
            web_postcode)
        # 家庭住址
        web_adress = web_province.text + '-' + web_city + '-' + ranEN(4)
        driver.find_element_by_id('homeAddress.address').send_keys(web_adress)

        # 安置人编号,先判断是否自动安置
        Placement = Oradao.sqlDiy(
            Oradao(), 'select * from MM_MEMBER_CHANGE c where c.member_id=' +
            str(member['ID']) +
            'and c.operate_type=50 order by c.create_date desc')
        len = Placement['ID'].__len__()
        if len == 0:
            value = 0
        else:
            value = Placement['NEW_VALUE'][0]
        if value == 0:
            driver.find_element_by_id('placementNo').send_keys(
                member['MEMBER_NO'])

        # SSN社会保险号/税号
        web_sin = random_select_by_id(driver, 'sinTaxType', 0)
        web_sin_no = ranNo(100000000, 999999999)
        driver.find_element_by_id('sinTaxId').send_keys(web_sin_no)
        # 账号
        web_account = web_name + '-account-' + ranEN(4)
        driver.find_element_by_id('eAccountNumber').send_keys(web_account)
        # 银行账号
        web_bank_name = 'bank-' + ranEN(4)
        driver.find_element_by_id('bankName').send_keys(web_bank_name)

        # 业务中心
        # 网页名字
        web_website_name = 'web_' + ranEN(2) + '_' + str(ranNo(10, 99))
        driver.find_element_by_id('websiteName').send_keys(web_website_name)
        # 密码及确认密码
        driver.find_element_by_id('password').send_keys('123456')
        driver.find_element_by_id('replatePassword').send_keys('123456')

        # 发货信息
        # 选择家庭住址
        driver.find_element_by_id('shipOrderAddressType0').click()

        # 自动单信息
        # 首次付款日期,选择当天日期
        driver.find_element_by_id('firstBillDate').click()
        time.sleep(1)
        driver.switch_to_frame(driver.find_element_by_tag_name('iframe'))
        # 选择第一个可选日期
        driver.find_element_by_class_name('Wwday').click()
        # driver.find_element_by_id('dpTodayInput').click()
        # driver.find_element_by_id('dpOkInput').click()
        driver.switch_to_default_content()
        driver.implicitly_wait(10)

        # 账单/付款
        # 支付方式,选择到公司支付
        driver.find_element_by_id('registerFeePayType1').click()
        # 选择账单地址
        driver.find_element_by_id('payAddressType0').click()

        # 接受条款
        driver.find_element_by_id('isAcceptTerms').click()
        # 提交申请
        driver.find_element_by_id('next').click()
        driver.implicitly_wait(10)

        # 验证注册信息
        rs = driver.find_elements_by_xpath(
            '//div[@class="panel-body"]/div/div/ul/li')
        if rs.__len__() > 0:
            # 验证会员编号
            # 会员姓名验证
            self.assertEqual(rs[0].text, web_name)
        else:
            error_msg = ''
            error = driver.find_elements_by_class_name('formErrorContent')
            for i in range(error.__len__()):
                error_msg += error[i].text
            raise Exception(u'提交注册信息失败,提示为' + error_msg)
        # 会员ID
        rs_member_no = rs[1].find_element_by_tag_name('span').text
        # 推荐人名称
        rs_sponsor_name = rs[3].find_element_by_tag_name('span').text

        member_sql = 'select * from mm_member where member_no = \'%s\''
        sponsor_sql = 'select * from mm_member where id = \'%s\''
        member_db = Oradao().sqlDiy(member_sql % rs_member_no)
        if member_db['ID'].__len__() == 1:
            # 验证推荐人,安置人
            rs_sponsor_id = member_db['SPONSOR_ID'][0]
            rs_placement_id = member_db['PLACEMENT_ID'][0]
            sponsor_db = Oradao().sqlDiy(sponsor_sql % rs_sponsor_id)
            placement_db = Oradao().sqlDiy(member_sql % member['MEMBER_NO'])
            # 验证推荐人,安置人ID是否一致
            self.assertEquals(rs_sponsor_name, sponsor_db['NAME'][0])
            self.assertEquals(rs_placement_id, placement_db['ID'][0])

            # 验证性别
            self.assertEquals(member_db['GENDER'][0], web_sex)
            # 验证国籍
            self.assertEquals(str(member_db['NATIONALITY_ID'][0]), web_nation)
            # 验证生日
            self.assertEquals(member_db['BIRTHDAY'][0].strftime('%Y-%m-%d'),
                              web_birthday)
            # 验证日间电话
            self.assertEquals(member_db['TELEPHONE'][0], web_day_phone)
            # 验证晚间电话
            self.assertEquals(member_db['EVENING_PHONE'][0], web_night_phone)
            # 验证电话
            self.assertEquals(member_db['MOBILE_PHONE'][0], web_phone)
            # 验证邮箱
            self.assertEquals(member_db['EMAIL'][0], web_mail)
        else:
            raise Exception(u'会员信息验证失败')

        # 验证登录成功
        driver.find_element_by_class_name('ots').find_element_by_tag_name(
            'a').click()
        driver.implicitly_wait(10)
        driver.find_element_by_id('password').send_keys('123456')
        driver.find_element_by_id('btnLogin').click()

        driver.implicitly_wait(10)
        # 将顶部会员信息分割开,取编码
        bo_member_no = driver.find_element_by_class_name(
            'username-hide-mobile').text.split('|')[1].strip(' ')
        # 验证会员编码
        self.assertEquals(rs_member_no, bo_member_no)
示例#6
0
class BoAutoOrder(unittest.TestCase):
    def setUp(self):
        self.conf = BoInitialize(1)
        self.driver = self.conf.login()
        self.verificationErrors = []
        pass

    def tearDown(self):
        self.conf.getScreenshot(self)
        self.assertEqual([], self.verificationErrors)
        self.driver.quit()
        pass

    # 自动重消单

    def testBoAutoOrder(self):
        driver = self.driver
        conf = self.conf
        # 切换语言
        conf.boLangChange(driver, 'zh_CN')
        time.sleep(2)

        # 打开订单-自动重消单
        driver.find_element_by_xpath('//ul[@id="mainmenu"]/li[4]/a').click()
        driver.find_element_by_id('2189909').click()
        time.sleep(2)

        # 新增自动重消单
        if conf.env == 'sandbox':
            driver.get(
                'https://sandbox-d-v1.jmtop.com/backOffice/autoOrder/autoOrderProductList'
            )
        elif conf.env == 'production':
            driver.get(
                'https://dist.jmtop.com/backOffice/autoOrder/autoOrderProductList'
            )

        # 更新购物车
        driver.find_element_by_xpath(
            '//form[@id="storeForm40"]/div/div/div/a').click()

        # 数据库随机取商品编码
        product = Oradao.sqlDiy(
            Oradao(),
            'select s.id,p.product_no from pm_product_sale s,pm_product p where p.id=s.product_id and s.order_type=30 and s.company_code=\''
            + conf.state + '\' and p.product_type=10 and s.del_flag=\'20\'')
        num = ranNo(0, product['ID'].__len__() - 1)
        product_id = product['ID'][num]
        product_no = product['PRODUCT_NO'][num]
        driver.find_element_by_name('sp_product.productNo_LIKE').send_keys(
            product_no)

        # 点击查询
        driver.find_element_by_id('btnSearch').click()
        time.sleep(2)

        # 加入购物车
        driver.find_element_by_id('cart' + str(product_id)).click()
        time.sleep(2)

        # 结算
        if conf.env == 'sandbox':
            driver.get(
                'https://sandbox-d-v1.jmtop.com/backOffice/autoOrder/autoOrderProductList'
            )
        elif conf.env == 'production':
            driver.get(
                'https://dist.jmtop.com/backOffice/autoOrder/autoOrderProductList'
            )

        # 下一步
        driver.find_element_by_id('addToCart_40').click()
        time.sleep(2)

        # 自提
        driver.find_element_by_id('isSelfPickup1').click()
        time.sleep(2)

        # 下一步
        driver.execute_script('scrollTo(0,1000)')
        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)

        # 填自动下单信息
        driver.find_element_by_id('description').send_keys('test')
        driver.find_element_by_id('nextRunDate').send_keys('2060-12-01')

        driver.find_element_by_id('cardHolderName').send_keys('test')
        driver.find_element_by_id('bankCardNo').send_keys('4444333322221111')
        Select(
            driver.find_element_by_name("expirationYear")).select_by_index(10)
        driver.find_element_by_id('securityCode').send_keys('123')

        driver.find_element_by_id('btnSubmit').click()
        time.sleep(2)

        # 提交订单
        driver.execute_script('scrollTo(0,1000)')
        driver.find_element_by_id('btnSubmit').click()
        driver.implicitly_wait(10)

        # 判断返回卡信息错误
        message = driver.find_element_by_class_name('toast-message').text[0:8]
        self.assertEqual(message, u'保存自动订单失败')
示例#7
0
class BoIndex(unittest.TestCase):
    def setUp(self):
        self.conf = BoInitialize()
        self.driver = self.conf.login()
        self.verificationErrors = []
        pass

    def tearDown(self):
        self.conf.getScreenshot(self)
        self.assertEqual([], self.verificationErrors)
        self.driver.quit()
        pass

    def testBoIndex(self):
        driver = self.driver
        conf = self.conf
        member = conf.member

        driver.implicitly_wait(10)
        # 分别获取页面中注册级别0,当前奖衔1,历史最高奖衔2
        topmsg = driver.find_elements_by_class_name('number')
        self.assertEquals(
            transData('member.enrollmentGrade').get(
                member['ENROLLMENT_GRADE']), topmsg[0].text.strip(' '))
        # self.assertEquals(transData('member.enrollmentGrade').get(member['ENROLLMENT_GRADE']),
        # topmsg[1].text.strip(' '))
        # 若数据库中最高奖衔字段值为空,则不去查对应的值进行断言
        if member['PIN_TITLE'] is '':
            self.assertEquals('', topmsg[2].text.strip(' '))
        else:
            self.assertEquals(
                transData('awardsInf.awards').get(member['PIN_TITLE']),
                topmsg[2].text.strip(' '))

        # 测试当前工作周
        cur_week = get_cur_week()
        last_week = get_last_stage(cur_week)
        page_working_stage = driver.find_element_by_xpath(
            '//tbody[@class="font-blue-chambray"]/tr[1]/td[1]').text
        self.assertEquals(page_working_stage, cur_week)

        # 查询会员本月及上月业绩
        total_bv = driver.find_elements_by_xpath('//span[@title="总业绩"]')
        # 上月总业绩
        page_last_bv = total_bv[0].text.replace(',', '')
        # 本月总业绩
        page_cur_bv = total_bv[1].text.replace(',', '')
        pfm_sql = '''
            SELECT *
            FROM br_Person_monthly_pfm
            WHERE working_Stage = '%s'
            AND member_id = '%s'
            '''
        cur_pfm = Oradao().sqlDiy(pfm_sql % (cur_week[:-2], member['ID']))
        last_pfm = Oradao().sqlDiy(pfm_sql % (last_week, member['ID']))
        # 若数据库中没记录,则当月业绩为0
        if cur_pfm['ID'].__len__() == 0:
            cur_pfm_bv = 0
        else:
            cur_pfm_bv = cur_pfm['FIRST_PURCHASE_BV'][0] + cur_pfm[
                'UPGRADE_BV'][0] + cur_pfm['REPEAT_PURCHASE_BV'][0]
        self.assertEquals("%.0f" % float(page_cur_bv), str(cur_pfm_bv))
        if last_pfm['ID'].__len__() == 0:
            last_pfm_bv = 0
        else:
            last_pfm_bv = last_pfm['FIRST_PURCHASE_BV'][0] + last_pfm[
                'UPGRADE_BV'][0] + last_pfm['REPEAT_PURCHASE_BV'][0]
        self.assertEquals("%.0f" % float(page_last_bv), str(last_pfm_bv))

        # 启动奖金,组织奖金
        web_bonus_bv = driver.find_elements_by_xpath(
            '//div[@class="portlet-body"]')[2].find_elements_by_class_name(
                'uppercase')
        web_start_bonus_bv = web_bonus_bv[0].text.strip(' BV').replace(',', '')
        web_organizational_bonus_bv = web_bonus_bv[3].text.strip(
            ' BV').replace(',', '')
        bonus_sql = '''
          SELECT *
          FROM BM_WEEKLY_BONUS_DAILY
          WHERE WORKING_STAGE = '%s'
          AND member_id = '%s'
          '''
        cur_bouns = Oradao().sqlDiy(bonus_sql % (cur_week, member['ID']))
        # 若数据库中没记录,则奖金为0
        if cur_bouns['ID'].__len__() == 0:
            start_bonus_bv = 0
            organizational_bonus_bv = 0
        else:
            start_bonus_bv = cur_bouns['START_BONUS_BV'][0]
            organizational_bonus_bv = cur_bouns['ORGANIZATIONAL_BONUS_BV'][0]
        self.assertEquals("%.0f" % float(web_start_bonus_bv),
                          str(start_bonus_bv))
        self.assertEquals("%.0f" % float(getNum(web_organizational_bonus_bv)),
                          str(organizational_bonus_bv))

        # 假期积分
        hld_inter = driver.find_elements_by_xpath(
            '//div[@class="portlet-body"]')[3].find_elements_by_class_name(
                'uppercase')
        web_hld_inter = hld_inter[0].text
        web_hld_inter_total = hld_inter[1].text
        web_account2 = hld_inter[2].text
        hld_sql = '''
          SELECT *
          FROM BM_MONTHLY_BONUS_DAILY
          WHERE WORKING_STAGE = '%s'
          AND member_id = '%s'
          '''
        hld_db_inter_ = Oradao().sqlDiy(hld_sql %
                                        (cur_week[:-2], member['ID']))
        # 若数据库中没记录,则积分为0
        if hld_db_inter_['ID'].__len__() == 0:
            hld_inter = 0
            hld_inter_total = 0
        else:
            hld_inter = hld_db_inter_['HOLIDAY_INTEGRAL'][0]
            hld_inter_total = hld_db_inter_['HOLIDAY_INTEGRAL_TOTAL'][0]
        self.assertEquals("%.0f" % float(web_hld_inter), str(hld_inter))
        self.assertEquals("%.0f" % float(web_hld_inter_total),
                          str(hld_inter_total))

        account2_sql = '''
            SELECT *
            FROM VACATION_POINT_ACCOUNT2
            WHERE flg = '%s'
            AND YEAR = '%s'
            AND member_id = '%s'
            '''
        account2_db = Oradao().sqlDiy(
            account2_sql % (0, time.localtime().tm_year - 1, member['ID']))
        # 若数据库中没记录,则积分为0
        if account2_db['ID'].__len__() == 0:
            account2_inter = 0
        else:
            account2_inter = account2_db['VPTS'][0]
        self.assertEquals("%.0f" % float(web_account2), str(account2_inter))

        # 测试公告栏
        announcement_sql = '''
            SELECT DISTINCT sa.id AS a,sa.*
            FROM sys_announcement sa inner join sys_announcement_office sao ON sa.id =
            sao.announcement_id inner join sys_office so ON sao.office_id =
            so.id
            AND ( so.del_flag = '0') inner join sys_announcement_image sai ON sa.id
            = sai.announcement_id
            WHERE sa.create_date < SYSDATE
            AND so.id = '%s'
            AND sa.del_flag = '0'
            AND (sa.publish_place = '0'
            OR sa.publish_place = '2')
            AND ROWNUM <= 5
            ORDER BY sa.id DESC
        '''
        announcement_db = Oradao().sqlDiy(announcement_sql %
                                          get_officeid_by_code(conf.state))
        web_announcement = driver.find_elements_by_xpath(
            '//div[@id="myCarousel"]/div/div/img')
        if announcement_db['ID'].__len__() > 0:
            announcement_title = announcement_db['TITLE']
            for i in range(web_announcement.__len__()):
                self.assertEquals(web_announcement[i].get_attribute('alt'),
                                  announcement_title[i])
        else:
            self.assertEquals(web_announcement.__len__(),
                              announcement_db['ID'].__len__())