import pytest
import os

from selenium.webdriver import Firefox
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.keys import Keys

@pytest.fixture
def browser():
    path_to_driver = os.path.join('drivers', 'geckodriver.exe')
    path_to_binary = r"C:\Program Files\Mozilla Firefox\firefox.exe"

    binary = FirefoxBinary(path_to_binary)
    driver = Firefox(executable_path=path_to_driver, firefox_binary=binary)
    driver.implicitly_wait(10)
    yield driver
    driver.quit()
  

def test_basic_duckduckgo_search(browser):
    URL = 'https://www.duckduckgo.com'
    PHRASE = 'panda'
  
    browser.get(URL)
  
    search_input = browser.find_element_by_id('search_form_input_homepage')
    search_input.send_keys(PHRASE + Keys.RETURN)
  
    link_divs = browser.find_elements_by_css_selector('#links > div')
    assert len(link_divs) > 0
    
    xpath = f"//div[@id='links']//*[contains(text(), '{PHRASE}')]"
    results = browser.find_elements_by_xpath(xpath)
    assert len(results) > 0
    
    search_input = browser.find_element_by_id('search_form_input')
    assert search_input.get_attribute('value') == PHRASE
    
def test_results_page(browser):    
    URL = 'https://www.duckduckgo.com'
    PHRASE = 'Python 3'
  
    browser.get(URL)
  
    search_input = browser.find_element_by_id('search_form_input_homepage')
    search_input.send_keys(PHRASE + Keys.RETURN)

    wait = WebDriverWait(browser, 15);
    wait.until(expected_conditions.title_contains("Python 3 at DuckDuckGo"))
    
    title = browser.title
    assert title == 'Python 3 at DuckDuckGo'
    
    more_button = browser.find_element_by_class_name('result--more__btn')
    more_button.click()
    
    title = browser.title
    assert title == 'Python 3 at DuckDuckGo'
      
    
    