Advertisement
aguzs

Untitled

Feb 24th, 2024
762
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.17 KB | None | 0 0
  1. import time
  2.  
  3. import pytest
  4. from selenium import webdriver
  5. from selenium.webdriver.common.by import By
  6. from selenium.webdriver.remote.webdriver import WebDriver
  7.  
  8.  
  9. @pytest.fixture
  10. def driver():
  11.     driver = webdriver.Chrome()
  12.     driver.maximize_window()
  13.     driver.get('https://www.traveloka.com')
  14.  
  15.     yield driver
  16.  
  17.     driver.quit()
  18.  
  19.  
  20. def test_rental_car(driver):
  21.     # Select cars product
  22.     driver.find_element(
  23.         By.XPATH,
  24.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[1]/div/div/div[6]'
  25.     ).click()
  26.  
  27.     # select tab without driver
  28.     driver.implicitly_wait(10)
  29.     without_driver = driver.find_element(
  30.         By.XPATH,
  31.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[1]/div/div[1]/div'
  32.     )
  33.     if without_driver.get_attribute('style') != 'background-color: rgb(1, 148, 243);':
  34.         without_driver.click()
  35.  
  36.     # select pickup location (Jakarta)
  37.     location_input = driver.find_element(
  38.         By.XPATH,
  39.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[1]/div/div[1]/div[1]/div[1]/input'
  40.     )
  41.     location_input.click()
  42.     location_input.send_keys('Jakarta')
  43.     # select first result
  44.     time.sleep(1)
  45.     driver.implicitly_wait(10)
  46.     driver.find_element(
  47.         By.CSS_SELECTOR,
  48.         'div.css-1dbjc4n.r-14lw9ot.r-1q52ik8.r-qklmqi.r-1loqt21.r-18u37iz.r-1wtj0ep.r-ymttw5.r-5njf8e.r-1otgn73.r-1i6wzkk.r-lrvibr.r-13qz1uu'
  49.     ).click()
  50.  
  51.     # select pickup date
  52.     driver.find_element(
  53.         By.XPATH,
  54.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[3]/div/div[1]/div[1]'
  55.     ).click()
  56.     driver.implicitly_wait(10)
  57.     select_date(driver, 3)  # select today + 3 day
  58.  
  59.     # select pickup time
  60.     time.sleep(1)
  61.     driver.find_element(
  62.         By.XPATH,
  63.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[5]/div/div[1]/div[1]'
  64.     ).click()
  65.     driver.implicitly_wait(10)
  66.     select_time(driver, 10, 30)  # select time 10.30
  67.  
  68.     # select drop-off date
  69.     time.sleep(1)
  70.     driver.find_element(
  71.         By.XPATH,
  72.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[7]/div/div[1]/div[1]'
  73.     ).click()
  74.     driver.implicitly_wait(10)
  75.     select_date(driver, 4)  # select today + 5 day
  76.  
  77.     # select drop-off time
  78.     time.sleep(1)
  79.     driver.find_element(
  80.         By.XPATH,
  81.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[5]/div/div[1]/div[1]'
  82.     ).click()
  83.     driver.implicitly_wait(10)
  84.     select_time(driver, 10, 30)  # select time 10.30
  85.  
  86.     # search button
  87.     driver.find_element(
  88.         By.XPATH,
  89.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[11]/div/div/div'
  90.     ).click()
  91.  
  92.  
  93. def select_date(driver: WebDriver, element_index):
  94.     date_element = driver.find_element(By.CSS_SELECTOR,
  95.                                        'div.css-1dbjc4n.r-14lw9ot.r-1wh2hl7.r-e65k4z.r-b4qz5r.r-1d2f490.r-1udh08x.r-u8s1d')
  96.  
  97.     available_dates = date_element.find_elements(
  98.         By.CSS_SELECTOR,
  99.         # 'div.css-1dbjc4n.r-1awozwy.r-kdyh1x.r-1loqt21.r-1777fci.r-1otgn73.r-1i6wzkk.r-lrvibr'
  100.         'div.css-1dbjc4n.r-13qz1uu'
  101.     )
  102.  
  103.     available_dates[element_index].click()
  104.  
  105.  
  106. def select_time(driver: WebDriver, hour_index, minute_index):
  107.     # time_wrapper_element = driver.find_element(
  108.     #     By.CSS_SELECTOR,
  109.     #     'div.css-1dbjc4n.r-14lw9ot.r-1wh2hl7.r-e65k4z.r-b4qz5r.r-1dqxon3.r-u8s1d.r-zchlnj.r-y46g1k'
  110.     # )
  111.     time_wrapper_element = driver.find_element(
  112.         By.XPATH,
  113.         '//*[@id="__next"]/div[4]/div[2]/div[1]/div[2]/div/div[3]/div/div/div/div/div[2]/div/div[5]/div/div[2]/div'
  114.     )
  115.     time_wrapper_element.find_element(
  116.         By.XPATH,
  117.         f"//div[contains(text(),'Hour')]/following-sibling::div//div[@tabindex='0'][text()='{hour_index}']"
  118.     ).click()
  119.     time_wrapper_element.find_element(
  120.         By.XPATH,
  121.         f"//div[contains(text(),'Minute')]/following-sibling::div//div[@tabindex='0'][text()='{minute_index}']"
  122.     ).click()
  123.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement