ctrip.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from selenium import webdriver
  2. from error import error
  3. import logging
  4. import time
  5. from selenium.common import exceptions
  6. class Ctrip:
  7. def __init__(self):
  8. self.index = "http://www.ctrip.com/" # 初始化携程的首页地址
  9. self.driver = webdriver.Chrome() # 浏览器对象,之后所有自动化测试操作都会用到该对象
  10. # 测试机票
  11. def air_ticket(self):
  12. self.close_advert()
  13. try:
  14. nav_flight = self.driver.find_element_by_id("nav_flight")
  15. except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
  16. return error.new("air_ticket find element with id(%s) error: %s", "nav_flight", e.msg)
  17. nav_flight.click()
  18. time.sleep(5)
  19. try:
  20. search_btn = self.driver.find_element_by_id("search_btn")
  21. except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
  22. return error.new("air_ticket find element with id(%s) error: %s", "search_btn", e.msg)
  23. search_btn.click()
  24. time.sleep(5)
  25. return None
  26. # 测试火车票
  27. def railway_ticket(self):
  28. self.close_advert()
  29. try:
  30. nav_trains = self.driver.find_element_by_id("nav_trains")
  31. except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
  32. return error.new("railway_ticket find element with id(%s) error: %s", "nav_trains", e.msg)
  33. nav_trains.click()
  34. time.sleep(5)
  35. try:
  36. searchbtn = self.driver.find_element_by_id("searchbtn")
  37. except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
  38. return error.new("air_ticket find element with id(%s) error: %s", "searchbtn", e.msg)
  39. # 关闭携程打开时底下的广告
  40. def close_advert(self):
  41. time.sleep(5)
  42. try:
  43. appd_wrap_close = self.driver.find_element_by_id("appd_wrap_close")
  44. except (exceptions.NoSuchElementException, exceptions.WebDriverException) as e:
  45. logging.debug("close_advert close advert with id(%s) not found", "appd_wrap_close")
  46. try:
  47. appd_wrap_close.click()
  48. except exceptions.ElementNotVisibleException:
  49. logging.error("close_advert find advert success and it maybe already closed")
  50. # 由于测试会使用浏览器或则占用其他资源,可在close中释放所有占用的资源
  51. def close(self):
  52. if self.driver is not None:
  53. self.driver.close()
  54. # 开始测试
  55. # 该方法有一个返回值,即测试的错误信息,如果返回值为None,则测试成功
  56. def run(self):
  57. if len(self.index) < 1:
  58. return error.new("Ctrip auto test error with empty index.")
  59. self.driver.get(self.index)
  60. self.close_advert()
  61. err = self.air_ticket()
  62. if err is not None:
  63. logging.error("Ctrip test air_ticket with index(%s) error: %s", self.index, err.to_string())
  64. return err
  65. err = self.railway_ticket()
  66. if err is not None:
  67. logging.error("Ctrip test railway_ticket with index(%s) error: %s", self.index, err.to_string())
  68. return err
  69. return None