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))
def setUp(self): self.conf = BoInitialize() self.driver = self.conf.login() self.verificationErrors = [] pass
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])
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()
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)
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'保存自动订单失败')
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__())