from selenium import webdriver from error import error import logging import time from selenium.common import exceptions class Ctrip: def __init__(self): self.index = "http://www.ctrip.com/" # 初始化携程的首页地址 self.driver = webdriver.Chrome() # 浏览器对象,之后所有自动化测试操作都会用到该对象 # 测试机票 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() 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