import unittest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class TestDuplicateAndMoveRequest(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.get('https://web.postman.co')
# Assume user is already logged in or login steps here
def test_duplicate_and_move_request(self):
driver = self.driver
wait = WebDriverWait(driver, 10)
# Navigate to the source collection
source_collection = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Source Collection']")))
source_collection.click()
# Find the request to duplicate
request = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'request-item') and .//span[text()='Test Request']]")))
request.click()
# Open request options menu
options_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@aria-label='Request options']")))
options_button.click()
# Click 'Duplicate' option
duplicate_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[text()='Duplicate']")))
duplicate_option.click()
# Wait for duplicated request to appear in the same collection
duplicated_request = wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'request-item') and .//span[text()='Test Request Copy']]")))
# Drag and drop duplicated request to target collection
target_collection = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Target Collection']")))
# Selenium does not support native drag and drop well, so use JS workaround
driver.execute_script("var source = arguments[0]; var target = arguments[1];\n var dataTransfer = new DataTransfer();\n source.dispatchEvent(new DragEvent('dragstart', {dataTransfer: dataTransfer}));\n target.dispatchEvent(new DragEvent('drop', {dataTransfer: dataTransfer}));\n source.dispatchEvent(new DragEvent('dragend', {dataTransfer: dataTransfer}));\n ", duplicated_request, target_collection)
# Verify duplicated request is now in target collection
target_collection.click()
moved_request = wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(@class, 'request-item') and .//span[text()='Test Request Copy']]")))
# Verify the duplicated request retains original details (e.g., method and URL)
moved_request.click()
method = wait.until(EC.presence_of_element_located((By.XPATH, "//button[@data-testid='request-method']"))).text
url = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@data-testid='url-input']"))).get_attribute('value')
self.assertEqual(method, 'GET')
self.assertEqual(url, 'https://api.example.com/data')
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()