def access_search_type_tab(browser, document, attribute, type): search_type_tab = get_parent_element( locate_element_by_id(browser, attribute, type, True, document)) while search_type_tab is None: check_for_browser_error(browser) search_type_tab = get_parent_element( locate_element_by_id(browser, attribute, type, True, document)) return search_type_tab
def access_document_information(browser, abstract, document): locate_element_by_id( browser, abstract.county.ids["Document Image"], "document image", False, document ) # Wait for image to load (doesn't work, need to test with throttling) document_information = locate_element_by_id( browser, abstract.county.ids["Document Information"], "document information", False, document) return document_information
def access_search_navigation_tab(browser, abstract, document): search_navigation_tab = locate_element_by_id( browser, abstract.county.ids["Search Navigation"], "search navigation", True, document) while search_navigation_tab is None: search_navigation_tab = locate_element_by_id( browser, abstract.county.ids["Search Navigation"], "search navigation", True, document) return search_navigation_tab
def access_pdf_load_status(browser, abstract, document): loading_status_element = locate_element_by_id( browser, abstract.county.ids["PDF Viewer Load Marker"], "PDF Viewer load status", False, document) while loading_status_element is None: check_for_error(browser, abstract, document) loading_status_element = locate_element_by_id( browser, abstract.county.ids["PDF Viewer Load Marker"], "PDF Viewer load status", False, document) return loading_status_element.text
def access_image_container(browser, abstract, document): image_container = locate_element_by_id( browser, abstract.county.ids["Image Container"], "image container", False, document) while image_container is None: check_for_error(browser, abstract, document) image_container = locate_element_by_id( browser, abstract.county.ids["Image Container"], "image container", False, document) return image_container.text
def access_document_information(browser, abstract, document): locate_element_by_id( browser, abstract.county.ids["Document Image"], # Document Image Loaded "document image", False, document) # doesn't work, need to test with throttling document_information = locate_element_by_id( browser, abstract.county.ids["Document Information"], "document information", False, document) # Document Information Loaded return document_information
def access_document_tables(browser, abstract, document): document_information = locate_element_by_id( browser, abstract.county.ids["Document Information"], "document information", False, document) return locate_elements_by_class_name( document_information, abstract.county.classes["Document Table"], "document information tables", False, document)
def get_document_type_and_number(browser, abstract, document): document_type_and_number_field = locate_element_by_id( browser, abstract.county.ids["Document Type And Number"], "document type and number field", document=document) return document_type_and_number_field.text.split('\n')[0]
def open_search_type_tab(browser, abstract, document): switch_to_search_menu_frame(browser, abstract) document_search_menu = locate_element_by_id( browser, abstract.county.buttons['Document Search Menu'], 'document search menu button', True, document) while not menu_is_active(document_search_menu): document_search_menu.click()
def access_results_table(browser, abstract, document): results = locate_element_by_id(browser, abstract.county.ids["Results Table"], "results table", False, document) center_element(browser, results) results_table = locate_element_by_tag_name( results, abstract.county.tags["Table Body"], "results table body", False, document) return results_table
def open_search_tab(browser, abstract): search_tab = locate_element_by_id(browser, abstract.county.ids["Search Tab"], "search tab", True) center_element(browser, search_tab) if is_active_class(get_parent_element(search_tab)): return else: search_tab.click()
def count_results(browser, abstract, document): # Wait for results table to load before getting count locate_element_by_id(browser, abstract.county.ids["Results Table"], "results table", False, document) # I don't think the above is doing anything useful naptime() # Need to find a better trigger to wait on result_count = locate_element_by_id(browser, abstract.county.ids["Result Count"], "result count", False, document) # This doesn't work the way it's supposed to # Need to perform a match against the document number in order to find the correct count # Check leopard for options if int(result_count.text.split(' ')[-1]) > 1: if document.type == "document_search": document.number_results = 1 elif document.type == "name": document.number_results = int(result_count.text.split(' ')[-1])
def read_login_message(browser, abstract): try: login_message = locate_element_by_id(browser, abstract.county.credentials[4], "login message", True) return login_message.text except StaleElementReferenceException: print('Encountered StaleElementReferenceException ' 'attempting to read login message, trying again.')
def get_results(browser, abstract, document): search_results_table = locate_element_by_id( browser, abstract.county.ids["Search Results"], "search results table", document=document) # Need a separate function path if multiple results are returned return locate_element_by_class_name(search_results_table, abstract.county.classes["Results"], "search results", True, document)
def access_results_table(browser, abstract, document): results = locate_element_by_id(browser, abstract.county.ids["Results Table"], "results section", document=document) results_table = locate_element_by_tag_name(results, abstract.county.tags["Body"], "results table", document=document) return results_table
def access_field_value(browser, document, id, field_type): field = locate_element_by_id(browser, id, field_type, document=document) if field_type.endswith('date'): return date_from_string(get_field_value(field).split(' ')[0]) elif field_type == 'document type': return update_sentence_case_extras(title_strip(get_field_value(field))) else: if field_type == 'reception number': document.reception_number = get_field_value(field) return get_field_value(field)
def get_results(browser, document, result_number): search_results_table = locate_element_by_id(browser, search_results_id, "search results table", document=document) results_class = determine_results_class(result_number) return locate_elements_by_class_name(search_results_table, results_class, "search results", True, document=document)
def record_parties(browser, abstract, document): parties_container = locate_element_by_id(browser, abstract.county.record["Parties"], "parties", False, document) parties_text_list = remove_empty_list_items( parties_container.text.split('\n')) midpoint = parties_text_list.index('Grantees') grantor = list(map(title_strip, parties_text_list[1:midpoint])) grantee = list(map(title_strip, parties_text_list[(midpoint + 1):])) record_value(abstract, 'grantor', list_to_string(grantor)) record_value(abstract, 'grantee', list_to_string(grantee))
def record_indexing_information(browser, abstract, document): indexing_information_container = locate_element_by_id( browser, abstract.county.record["Indexing Information"], "indexing information", False, document) indexing_text = indexing_information_container.text.split('\n') if len(indexing_text) == 5: indexing_text = indexing_text[:-1] reception_number_text, book_and_page_text, effective_date_text, recording_date_text = indexing_text record_reception_number(abstract, document, reception_number_text) record_book_and_page(abstract, book_and_page_text) record_effective_date(abstract, effective_date_text) record_recording_date(abstract, recording_date_text)
def validate_login(browser, abstract): switch_to_main_frame(browser, abstract) welcome_message = locate_element_by_id(browser, abstract.county.ids['Post Login'], 'post login') if welcome_message.text.strip() == abstract.county.messages['Post Login']: print('\nLogin successful, continuing program execution.') else: # print('\nBrowser failed to successfully login, exiting program.') # browser.quit() # exit() print('\nBrowser failed to successfully login, please review...') input()
def access_notes(browser, abstract, document): notes_container = locate_element_by_id(browser, abstract.county.record["Notes"], "notes", False, document) notes_text = get_direct_children(notes_container)[2].text if notes_text.startswith('Legals'): return list_to_string(notes_text.split('\n')[1:]) elif notes_text.startswith('Notes'): return list_to_string(notes_text.split(' ')[1:], False) else: input( 'Unexpected result while parsing notes, please review and update accordingly...' )
def check_for_redirect(browser, abstract): micro_nap() redirect_modal = locate_element_by_id( browser, abstract.county.ids["Redirect Modal"], "redirect modal", quick=True) if redirect_modal is None: return elif get_element_class( redirect_modal) == abstract.county.classes["Redirect Active"]: buttons = locate_elements_by_class_name( browser, abstract.county.buttons["Login"], "login buttons", True) buttons[2].click()
def open_search(browser, abstract): # Messy => figure out a better way to do this javascript_script_execution(browser, abstract.county.scripts["Search"]) naptime() # This will probably not work great when called during the 'login' process ###### search_navigation = locate_element_by_id( browser, abstract.county.ids["Search Navigation"], "search navigation", True) if is_active_class(search_navigation): return else: browser.execute_script(abstract.county.scripts["Search"]) assert abstract.county.titles["Search"]
def count_results(browser, abstract, document): click_button(browser, locate_element_by_id, abstract.county.buttons["Result Count"], "result count button", document) # Open Result Count naptime() naptime() result_count = locate_element_by_id(browser, abstract.county.ids["Result Count"], "result count", document=document) # Get Result Count # This doesn't work the way it's supposed to # Need to perform a match against the document number in order to find the correct count # Check leopard for options if int(result_count.text.split(' ')[-1]) > 1: document.number_results = 1
def handle_disclaimer(browser, abstract): javascript_script_execution( browser, abstract.county.scripts["Open Search"] ) disclaimer = locate_element_by_id(browser, abstract.county.ids["Disclaimer"], "disclaimer" ) if disclaimer.get_attribute('class') == abstract.county.classes["Disclaimer Active"]: click_button( browser, locate_element_by_id, abstract.county.buttons["Disclaimer"], "disclaimer button" ) naptime()
def access_logout_link(browser, abstract): logout_button = locate_element_by_id(browser, abstract.county.buttons["Logout"], "logout button", True) return logout_button.get_attribute("href")
def get_search_result_rows(browser, document): search_results = locate_element_by_id(browser, results_table_id, "search results", document=document) result_rows = locate_elements_by_tag_name(search_results, result_row_tag_name, "search result rows", document=document) return result_rows[1:-1]
def enter_credentials(browser, abstract): login_prompt = locate_element_by_id(browser, abstract.county.credentials[1], "login prompt") login_prompt.send_keys(abstract.county.credentials[0] + Keys.TAB + abstract.county.credentials[2] + Keys.RETURN)
def get_results_table_body(browser, abstract, document): results_table = locate_element_by_id(browser, abstract.county.ids["Results Table"], "results table", False, document) scroll_into_view(browser, results_table) return locate_element_by_tag_name(results_table, abstract.county.tags["Results Table Body"], "results table body", False, document)
def count_results(browser, abstract, document): result_count = locate_element_by_id(browser, abstract.county.ids["Results Count"], "results count", False, document) # 'check_For_alert' function originally followed the timeout exception in 'locate_result_count' function # If result count == none, perform a "re-search" return result_count.text.split(' ')[-1]