123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- # -*- coding: utf-8 -*-
- from selenium import webdriver
- from error import error
- import logging
- import time
- from selenium.common import exceptions
- from selenium.webdriver.common.by import By
- class Ctrip:
- def __init__(self):
- self.index = "http://www.ctrip.com/" # 初始化携程的首页地址
- self.driver = webdriver.Chrome() # 浏览器对象,之后所有自动化测试操作都会用到该对象
- def login(self):
- # 进入登录页
- print('----------------进入登录页')
- time.sleep(2)
- login_btn = self.driver.find_element(By.XPATH, '//*[@id="hp_nfes_accountbar"]/li[1]/div/button/div')
- if not login_btn:
- err = '找不到登录按钮'
- logging.error(err)
- return err
- login_btn.click()
- time.sleep(2)
- code_btns = self.driver.find_elements(By.CLASS_NAME, 'login-entry-dynamic')
- if len(code_btns) > 0:
- code_btn = code_btns[0]
- else:
- err = '找不到切换手机验证码按钮'
- logging.error(err)
- return err
- # 切换到手机号登录
- time.sleep(2)
- code_btn.click()
- # 输入账号和发送验证码
- dyphone = self.driver.find_element(By.ID, 'dyphone')
- if not dyphone:
- err = '找不到电话输入框'
- logging.error(err)
- return err
- time.sleep(2)
- dyphone.send_keys('15626215750')
- # 发送验证码按钮
- sdy = self.driver.find_element(By.ID, 'sdy')
- if not sdy:
- err = '找不到发送验证码按钮'
- logging.error(err)
- return err
- time.sleep(2)
- sdy.click()
- # 关闭滑动验证码
- time.sleep(2)
- slider = self.driver.find_element(By.XPATH, '//*[@id="sliderdddynamic"]/div/div[1]/div[2]/div')
- if not slider:
- err = '找不到验证码关闭按钮'
- logging.error(err)
- return err
- slider.click()
- # 切换到账号密码登录
- time.sleep(3)
- go_prev_step = self.driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[2]/div/div[1]/div[3]/form/a')
- if not go_prev_step:
- err = '找不到返回账号登录按钮'
- logging.error(err)
- return err
- time.sleep(2)
- go_prev_step.click()
- # 输入账号密码
- time.sleep(2)
- nloginname = self.driver.find_element(By.ID, 'nloginname')
- npwd = self.driver.find_element(By.ID, 'npwd')
- nloginname.send_keys('15626215750')
- time.sleep(1)
- npwd.send_keys('SFPbP3iW')
- time.sleep(2)
- nsubmit = self.driver.find_element(By.ID, 'nsubmit')
- nsubmit.click()
- # 测试机票
- def air_ticket(self):
- self.close_advert()
- try:
- nav_flight = self.driver.find_element_by_id("nav_flight")
- except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
- return error.new("air_ticket find element with id(%s) error: %s", "nav_flight", e.msg)
- nav_flight.click()
- time.sleep(5)
- try:
- search_btn = self.driver.find_element_by_id("search_btn")
- except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
- return error.new("air_ticket find element with id(%s) error: %s", "search_btn", e.msg)
- search_btn.click()
- time.sleep(5)
- return None
- # 测试火车票
- def railway_ticket(self):
- self.close_advert()
- try:
- nav_trains = self.driver.find_element_by_id("nav_trains")
- except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
- return error.new("railway_ticket find element with id(%s) error: %s", "nav_trains", e.msg)
- nav_trains.click()
- time.sleep(5)
- try:
- searchbtn = self.driver.find_element_by_id("searchbtn")
- except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
- return error.new("air_ticket find element with id(%s) error: %s", "searchbtn", e.msg)
- # 关闭携程打开时底下的广告
- def close_advert(self):
- time.sleep(5)
- try:
- appd_wrap_close = self.driver.find_element_by_id("appd_wrap_close")
- except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
- logging.debug("close_advert close advert with id(%s) not found", "appd_wrap_close")
- try:
- appd_wrap_close.click()
- except exceptions.ElementNotVisibleException:
- logging.error("close_advert find advert success and it maybe already closed")
- # 由于测试会使用浏览器或则占用其他资源,可在close中释放所有占用的资源
- def close(self):
- if self.driver is not None:
- self.driver.close()
- # 开始测试
- # 该方法有一个返回值,即测试的错误信息,如果返回值为None,则测试成功
- def run(self):
- if len(self.index) < 1:
- return error.new("Ctrip auto test error with empty index.")
- self.driver.get(self.index)
- # self.close_advert()
- print('----------------打开了页面')
- err = self.login()
- if err:
- logging.error('Ctrip login err', err)
- return err
- # err = self.air_ticket()
- # if err is not None:
- # logging.error("Ctrip test air_ticket with index(%s) error: %s", self.index, err.to_string())
- # return err
- #
- # err = self.railway_ticket()
- # if err is not None:
- # logging.error("Ctrip test railway_ticket with index(%s) error: %s", self.index, err.to_string())
- # return err
- return None
|