def test_class_selector_modal_opens(self): """ Creating / Modifying a class opens up the class selector modal """ self.admin_log_in_complete() self.check_admin_class_modal() close_modal_x = self.browser.find_element_by_class_name('close') close_modal_x.click() modal_wait = WebDriverWait(self.browser, 5).until( EC.invisibility_of_element_located((By.CLASS_NAME,'modal-backdrop'))) #Check that it opens again correctly self.check_admin_class_modal() cancel_modal_btn = self.browser.find_element_by_link_text('Cancel') cancel_modal_btn.click() modal_wait = WebDriverWait(self.browser, 5).until( EC.invisibility_of_element_located((By.CLASS_NAME,'modal-backdrop'))) #Check that it opens again correctly self.check_admin_class_modal()
def test_plot(self): wait = WebDriverWait(self.driver, 10) wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, 'md-progress-linear.loader.md-default-theme'))) since_dropdown = ["YESTERDAY", "WEEK_TO_DATE", "MONTH_TO_DATE", "YEAR_TO_DATE"] for css_selector in since_dropdown: # Click on 'Since' field to filter self.driver.find_element_by_css_selector('#select_value_label_5 > span').click() time.sleep(0.5) # Click on the desired option from the dropdown according to the list [eg. '29' is for 'custom date range'] self.driver.find_element_by_css_selector('md-option[value = {0}] > div'.format(css_selector)).click() # Click on refresh data button self.driver.find_element_by_css_selector( '.ads-dashboard > div:nth-child(1) > div:nth-child(3) > div:nth-child(1) > md-card:nth-child(1) >' ' md-card-content:nth-child(1) > div:nth-child(3) > div:nth-child(1) > button:nth-child(1)').click() # Find loader and wait for it to disappear self.driver.find_element_by_css_selector('md-progress-linear.loader.md-default-theme') wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, 'md-progress-linear.loader.md-default-theme'))) if css_selector == "YESTERDAY": graph_start_date = self.driver.find_element_by_css_selector('.flot-x-axis > div:nth-child(1)').text calculated_start_date = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%b %d') self.assertEqual(graph_start_date, str(calculated_start_date)) if css_selector == "WEEK_TO_DATE": graph_start_date = self.driver.find_element_by_css_selector('.flot-x-axis > div:nth-child(1)').text graph_end_date = self.driver.find_element_by_css_selector('.flot-x-axis > div:nth-last-child(1)').text calculated_start_date = (datetime.datetime.now() - datetime.timedelta(days=7)).strftime('%b %d') calculated_end_date = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%b %d') self.assertEqual(graph_start_date, str(calculated_start_date)) self.assertEqual(graph_end_date, str(calculated_end_date)) if css_selector == "MONTH_TO_DATE": graph_start_date = self.driver.find_element_by_css_selector('.flot-x-axis > div:nth-child(1)').text graph_end_date = self.driver.find_element_by_css_selector('.flot-x-axis > div:nth-last-child(1)').text calculated_start_date = datetime.datetime.now().strftime('%b 01') calculated_end_date = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%b %d') self.assertEqual(graph_start_date, str(calculated_start_date)) self.assertEqual(graph_end_date, str(calculated_end_date)) if css_selector == "YEAR_TO_DATE": graph_start_date = self.driver.find_element_by_css_selector('.flot-x-axis > div:nth-child(1)').text calculated_start_date = datetime.datetime.now().strftime('Jan 01') print calculated_start_date self.driver.find_element_by_css_selector('smart-resource-loader.ng-isolate-scope:nth-child(1) > div:nth-child(1).text')
def test_submit_assignment(browser, port, class_files, tempdir): _load_assignments_list(browser, port) # submit it _wait(browser).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "#fetched_assignments_list_placeholder"))) rows = browser.find_elements_by_css_selector("#fetched_assignments_list > .list_item") rows[0].find_element_by_css_selector(".item_status button").click() # wait for the submitted assignments list to update _wait(browser).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "#submitted_assignments_list_placeholder"))) rows = browser.find_elements_by_css_selector("#submitted_assignments_list > .list_item") assert len(rows) == 1 assert rows[0].find_element_by_class_name("item_name").text == "ps.01" assert rows[0].find_element_by_class_name("item_course").text == "xyz 200" # submit it again rows = browser.find_elements_by_css_selector("#fetched_assignments_list > .list_item") rows[0].find_element_by_css_selector(".item_status button").click() # wait for the submitted assignments list to update _wait(browser).until(lambda browser: len(browser.find_elements_by_css_selector("#submitted_assignments_list > .list_item")) == 2) rows = browser.find_elements_by_css_selector("#submitted_assignments_list > .list_item") rows.sort(key=_sort_rows) assert rows[0].find_element_by_class_name("item_name").text == "ps.01" assert rows[0].find_element_by_class_name("item_course").text == "xyz 200" assert rows[1].find_element_by_class_name("item_name").text == "ps.01" assert rows[1].find_element_by_class_name("item_course").text == "xyz 200" assert rows[0].find_element_by_class_name("item_status").text != rows[1].find_element_by_class_name("item_status").text
def wait_for_element_to_disappear(driver, _debug, ele, etype, timeout): """ this function monitors a html page before executing the script further and waits for an element to disappear args: driver - selenium driver object ele - element to wait for etype - element time (could be ID or NAME) timeout - time to wait in seconds returns: True - in case the element was found False - if timeout kicks in and aborts the function """ try: if etype == 'id': element_not_present = EC.invisibility_of_element_located((By.ID, ele)) elif etype == 'name': element_not_present = EC.invisibility_of_element_located((By.NAME, ele)) elif etype == 'class': element_not_present = EC.invisibility_of_element_located((By.CLASS_NAME, ele)) else: element_not_present = EC.invisibility_of_element_located((By.NAME, ele)) WebDriverWait(driver, timeout).until(element_not_present) return True except TimeoutException: print("Timed out waiting for element to disappear") return False
def test_help_modal_opens_and_closes(self): """ The Help modal opens on click and closes on exit or blur """ # Jane has some questions about the tool and sees a 'help' button in the menu. She # clicks it and is shown a window describing the Video Concept browser and a # point of contact at OEIT. self.student_log_in_complete() class_name = self.new_class_session.class_name side_nav_menu = self.browser.find_elements_by_class_name('nav-header') self.assertTrue(class_name, [nav_header.text for nav_header in side_nav_menu]) # Check the help modal is present but not viewable help_modal = self.browser.find_element_by_id('help_modal') self.assertFalse(help_modal.is_displayed()) help_link = self.browser.find_element_by_class_name('nav-help') help_link.click() modal_wait = WebDriverWait(self.browser, 5).until( EC.visibility_of_element_located((By.ID,'help_modal'))) self.assertTrue(help_modal.is_displayed()) modal_background = self.browser.find_element_by_class_name('reveal-modal-bg') self.assertTrue(modal_background.is_displayed()) close_modal_link = self.browser.find_element_by_class_name('close-reveal-modal') close_modal_link.click() modal_wait = WebDriverWait(self.browser, 5).until( EC.invisibility_of_element_located((By.ID,'help_modal'))) modal_wait = WebDriverWait(self.browser, 5).until( EC.invisibility_of_element_located((By.CLASS_NAME,'reveal-modal-bg'))) self.assertFalse(help_modal.is_displayed()) # Repeat but test close by clicking outside of the modal help_link.click() modal_wait = WebDriverWait(self.browser, 5).until( EC.visibility_of_element_located((By.ID,'help_modal'))) self.assertTrue(help_modal.is_displayed()) self.assertTrue(modal_background.is_displayed()) builder = ActionChains(self.browser) click_outside_modal = builder.move_to_element(modal_background) \ .move_by_offset(-500, -300) \ .click() click_outside_modal.perform() modal_wait = WebDriverWait(self.browser, 5).until( EC.invisibility_of_element_located((By.ID,'help_modal'))) modal_wait = WebDriverWait(self.browser, 5).until( EC.invisibility_of_element_located((By.CLASS_NAME,'reveal-modal-bg'))) self.assertFalse(help_modal.is_displayed())
def click_back_to_file_content_modal_button(self): """ Clicks back file content modal. """ self._wait.until(ec.invisibility_of_element_located(self._changes_successfully_saved)) click_element(self._driver, self._driver.find_element(*self._back_button)) self._wait.until(ec.invisibility_of_element_located(self._annotation_panel))
def _wait_for_list(browser, name, num_rows): _wait(browser).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "#{}_assignments_list_loading".format(name)))) _wait(browser).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, "#{}_assignments_list_placeholder".format(name)))) _wait(browser).until(lambda browser: len(browser.find_elements_by_css_selector("#{}_assignments_list > .list_item".format(name))) == num_rows) rows = browser.find_elements_by_css_selector("#{}_assignments_list > .list_item".format(name)) assert len(rows) == num_rows return rows
def test_MDT_enter_bid_invalid_qty(self): WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("create_workspace_btn")))) workspace_name = "MDT Enter Bid Invalid Qty" return_msg = self.helper.open_new_workspace(workspace_name) self.assertEqual(return_msg, "OK", "Call to open_new_workspace failed: '" + return_msg + "'") #Verify the name of the workspace window that pops up self.driver.switch_to_window(self.driver.window_handles[-1]) window_name = self.driver.title self.assertEqual(window_name, workspace_name, "Workspace window does not match name of workspace") #Make sure the user has a valid connection return_msg = self.helper.is_valid_connection() self.assertEqual(return_msg, "Connected", "Call to is_valid_connection failed: '" + return_msg + "'") #Open MDT window workspace_windows = ['mdt'] self.assertTrue(self.helper.populate_workspace(workspace_windows), "Call to populate_workspace failed") #Find bid price with qty in MDT window and attempt to enter order self.driver.find_element_by_xpath(self.helper.get_xpath("mdt_bid_has_value")).click() #Verify message box appears for invalid order quantity what = self.helper.get_xpath("mdt_invalid_qty") WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.XPATH, what))) element = self.driver.find_element_by_xpath(what) self.assertEqual(element.text, "Invalid order quantity: 0", "Invalid order quantity message not found") #Verify there is no bid price with a working qty (i.e. the order was never entered) WebDriverWait(self.driver, 5).until(EC.invisibility_of_element_located((By.XPATH, self.helper.get_xpath("mdt_working_bid_price")))) #Close message box and verify it is no longer visible self.driver.find_element_by_xpath(self.helper.get_xpath("mdt_invalid_qty_close_btn")).click() WebDriverWait(self.driver, 5).until(EC.invisibility_of_element_located((By.XPATH, self.helper.get_xpath("mdt_invalid_qty"))))
def checkStatus(step,selector,visible): # element = world.browser.find_element_by_css_selector(selector) if visible == "invisible" : EC.invisibility_of_element_located((By.CSS_SELECTOR,selector)) elif visible == "visible" : EC.visibility_of_element_located((By.CSS_SELECTOR,selector)) else : assert True == False, "Incorrect command (invisible or visible) : %s" % visible
def testExpectedConditionInvisiblityOfElementLocated(self, driver, pages): pages.load("javascriptPage.html") driver.execute_script("delayedShowHide(0, true)") with pytest.raises(TimeoutException): WebDriverWait(driver, 0.7).until(EC.invisibility_of_element_located((By.ID, 'clickToHide'))) driver.execute_script("delayedShowHide(200, false)") element = WebDriverWait(driver, 0.7).until(EC.invisibility_of_element_located((By.ID, 'clickToHide'))) assert element.is_displayed() is False
def click_done(self): self._webd_wrap.wait.until(EC.invisibility_of_element_located((By.ID, 'receive_author_emails'))) _elt = self._webd_wrap._driver.find_element_by_id('sign-in-modal').find_element_by_xpath('footer/a') self._webd_wrap._driver.execute_script("(arguments[0]).click()", _elt) # confirms the modal is gone self._webd_wrap.wait.until(EC.invisibility_of_element_located((By.CLASS_NAME, 'fancybox-inner')))
def testExpectedConditionInvisiblityOfElementLocated(self, driver, pages): if driver.capabilities['browserName'] == 'firefox' and driver.w3c: pytest.xfail("Marionette issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1297551") pages.load("javascriptPage.html") driver.execute_script("delayedShowHide(0, true)") with pytest.raises(TimeoutException): WebDriverWait(driver, 0.7).until(EC.invisibility_of_element_located((By.ID, 'clickToHide'))) driver.execute_script("delayedShowHide(200, false)") element = WebDriverWait(driver, 0.7).until(EC.invisibility_of_element_located((By.ID, 'clickToHide'))) assert element.is_displayed() is False
def click_download_batch_button(self): """ Clicks the Download button in Batch Image Order section. """ try: click_element(self._driver, self._driver.find_element(*self._apply_keywords_button)) self._wait.until(ec.invisibility_of_element_located(self._apply_keywords_button)) except TimeoutException: self._driver.find_element(*self._apply_keywords_button).click() self._wait.until(ec.invisibility_of_element_located(self._apply_keywords_button))
def test_MDT_clear_reset(self): WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("create_workspace_btn")))) workspace_name = "MDT Clear Reset" return_msg = self.helper.open_new_workspace(workspace_name) self.assertEqual(return_msg, "OK", "Call to open_new_workspace failed: '" + return_msg + "'") #Verify the name of the workspace window that pops up self.driver.switch_to_window(self.driver.window_handles[-1]) window_name = self.driver.title self.assertEqual(window_name, workspace_name, "Workspace window does not match name of workspace") #Make sure the user has a valid connection return_msg = self.helper.is_valid_connection() self.assertEqual(return_msg, "Connected", "Call to is_valid_connection failed: '" + return_msg + "'") #Open MDT and order book windows workspace_windows = ['mdt', 'order_book'] self.assertTrue(self.helper.populate_workspace(workspace_windows), "Call to populate_workspace failed") #Click confiuration drop down icon and then click Configure, update default qty to 2 and then save the default value WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_configuration_dropdown")))).click() WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_configure")))).click() WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_default_qty")))).send_keys("2") WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_configure_save")))).click() #Click 'C' button to clear qty WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_clear")))).click() #Find bid price with qty in MDT window and attempt to enter order self.driver.find_element_by_xpath(self.helper.get_xpath("mdt_bid_has_value")).click() #Verify message box appears for invalid order quantity what = self.helper.get_xpath("mdt_invalid_qty") WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.XPATH, what))) element = self.driver.find_element_by_xpath(what) self.assertEqual(element.text, "Invalid order quantity: 0", "Invalid order quantity message not found") #Verify there is no bid price with a working qty (i.e. the order was never entered) WebDriverWait(self.driver, 5).until(EC.invisibility_of_element_located((By.XPATH, self.helper.get_xpath("mdt_working_bid_price")))) #Close message box and verify it is no longer visible self.driver.find_element_by_xpath(self.helper.get_xpath("mdt_invalid_qty_close_btn")).click() WebDriverWait(self.driver, 5).until(EC.invisibility_of_element_located((By.XPATH, self.helper.get_xpath("mdt_invalid_qty")))) #Set qty to 1 and the click reset button to set qty back to 2 WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_qty1_btn")))).click() WebDriverWait(self.driver, 5).until(EC.element_to_be_clickable((By.XPATH, self.helper.get_xpath("mdt_reset")))).click() #Find bid price with qty in MDT window and attempt to enter order self.driver.find_element_by_xpath(self.helper.get_xpath("mdt_bid_has_value")).click() #Verify values in order book return_msg = self.helper.validate_order(qty=2) self.assertEqual(return_msg, "OK", "Call to validate_order failed: '" + return_msg + "'")
def testExpectedConditionInvisiblityOfElementLocated(self): self._loadPage("javascriptPage") self.driver.execute_script("delayedShowHide(0, true)") try: WebDriverWait(self.driver, 0.7).until(EC.invisibility_of_element_located((By.ID, 'clickToHide'))) self.fail("Expected TimeoutException to have been thrown") except TimeoutException as e: pass self.driver.execute_script("delayedShowHide(200, false)") element = WebDriverWait(self.driver, 0.7).until(EC.invisibility_of_element_located((By.ID, 'clickToHide'))) self.assertFalse(element.is_displayed())
def clear_tryon_items(self): self.choose_tryon_items() clear = WebDriverWait(self.webdriver, 10).until(EC.visibility_of_element_located((By.ID, "Clear"))) clear.click() WebDriverWait(self.webdriver, 10).until(EC.invisibility_of_element_located((By.ID, "cur_item_577")), 'Timed Out') WebDriverWait(self.webdriver, 10).until(EC.invisibility_of_element_located((By.ID, "cur_item_42")), 'Timed Out') WebDriverWait(self.webdriver, 10).until(EC.invisibility_of_element_located((By.ID, "tryimgtmp577")), 'Timed Out') try: WebDriverWait(self.webdriver, 10).until(EC.invisibility_of_element_located((By.ID, "tryimgtmp42")), 'Timed Out') return True except TimeoutException: return False
def add_new_email(self): WebDriverWait(self.driver, 10).until( lambda driver: EC.invisibility_of_element_located(driver.find_element_by_xpath(self.MAILBOX_PRELOADER)) ) WebDriverWait(self.driver, 10).until( EC.visibility_of_element_located((By.XPATH, self.ADD_EMAIL_BUTTON)) ) self.driver.find_element_by_xpath(self.ADD_EMAIL_BUTTON).click() WebDriverWait(self.driver, 10).until( lambda driver: EC.invisibility_of_element_located(driver.find_element_by_xpath(self.PRELOADER)) ) WebDriverWait(self.driver, 10).until( lambda driver: EC.element_to_be_clickable(driver.find_element_by_xpath(self.LOGIN_FORM)) )
def select_background(self, background): driver = InterfaceTest.driver wait = InterfaceTest.wait side_hover = driver.find_element_by_id("viewMenuHover") ActionChains(InterfaceTest.driver).move_to_element(side_hover).perform() background_button = wait.until(ec.element_to_be_clickable((by.XPATH, "//*[contains(text(), 'Change Background')]"))) wait.until(ec.invisibility_of_element_located((by.ID, "change-background-modal"))) background_button.click() background_list = wait.until(ec.element_to_be_clickable((by.ID, "change-background-list"))) select = Select(background_list) select.select_by_visible_text(background) driver.find_element_by_id("submit-change-background").click() wait.until(ec.invisibility_of_element_located((by.ID, "template-modal"))) wait.until(ec.invisibility_of_element_located((by.ID, "change-background-modal")))
def remove_test_user(self, name, server_url, should_raise_exception=True): """Manually remove a test user using the landing page (the only way). Args: name: A string for the name of the test user to remove. server_url: The base url portion of the landing page. should_raise_exception: True to raise an exception if the user is not found. """ self.go_to_landing_page(server_url) # Find the user and navigate to their details page. user_item = self.findTestUser(name) if user_item is None: if should_raise_exception: raise Exception else: return else: user_item.click() # Click delete on that user. details_modal = user_item.find_element(*LandingPage.DETAILS_MODAL) WebDriverWait(self.driver, UfOPageLayout.DEFAULT_TIMEOUT).until( EC.visibility_of(details_modal)) delete_button = details_modal.find_element(*LandingPage.USER_DELETE_BUTTON) delete_button.click() # Wait for post to finish, can take a while. WebDriverWait(self.driver, UfOPageLayout.DEFAULT_TIMEOUT).until( EC.invisibility_of_element_located((( LandingPage.USER_DETAILS_SPINNER))))
def test_unlink_directory(self): init_test_dirs() a = Directory.objects.get(name="a") ab_a = Directory.objects.get(name="ab_a") ab_a_a = Directory.objects.get(name="ab_a_a") self.go_to_home_page() self.enter_into_dir(a.name) self.enter_into_dir(ab_a.name) ab_a_a_css = 'a[directory-id="%d"]' % ab_a_a.id # ensure the directory `ab_a_a` exists self.browser.find_element_by_css_selector(ab_a_a_css) # unlink ab_a_a unlink_elements = self.browser.find_elements_by_css_selector("a.btn-unlink-directory") unlink_elements[0].click() self.browser.find_element_by_css_selector("button.btn-confirmed").click() # check that the directory is unlinked WebDriverWait(self.browser, 1).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ab_a_a_css))) self.assertNotInDirectoryTable(ab_a_a.name) # we can find it in the home page self.go_to_home_page(refresh=False) self.assertInDirectoryTable(ab_a_a.name)
def scarica_bolla(self, tipo_bolla): '''Procedura di raccolta dati bolla dal portale adriaticapress e scrittura su file csv. tipo_bolla può essere uno dei 2 valori ['B', 'C'] ''' #Inserisco elemento di controllo sul caricamento della bolla vera e propria elemento_controllo = WebDriverWait(self.dr, 300).until(EC.invisibility_of_element_located((By.ID, 'loaderBodyPage'))) time.sleep(1) #Rendo header statico, così da non interferier nello scroll self.dr.execute_script('$(".superHeader").css({position: "static"});') time.sleep(1) lista_bolla = [['testata tipo', '12345', '12345', '123456789012345678', '99.00']] elenco_link_testate = self.dr.find_elements_by_css_selector('a[id^=\"ctl00_MainContent_dlBolla_ctl\"]') for link in elenco_link_testate: dati_testata = [] #Assicurarsi che il link sia visibile prima di clickarlo self.dr.execute_script('arguments[0].scrollIntoView();', link) link.click() nome_testata = WebDriverWait(self.dr, 300).until(EC.presence_of_element_located((By.ID, 'lblTitoloDettaglio'))).text.replace(',', '.') identificativo_testata = self.dr.find_element_by_id('lblCodice').text numero_testata = self.dr.find_element_by_id('lblNumeroDettaglio').text prezzo_testata = self.dr.find_element_by_id('lblPrezzoDettaglio').text[2:].replace(',', '.') try: barcode_testata = self.dr.find_element_by_id('lblBarcodeDettaglio').text except NoSuchElementException: barcode_testata = '3103{}'.format(str(randrange(1, 99999999999999)).zfill(14)) dati_testata.extend([nome_testata, identificativo_testata, numero_testata, barcode_testata, prezzo_testata]) lista_bolla.append(dati_testata) with open(PATH_BOLLA_SCARICATA, 'w') as output_file: output_writer = csv.writer(output_file) for row in lista_bolla: output_writer.writerow(row) return self.mio_testo.insertPlainText('{} File {} creato\n'.format(time.strftime('%H:%M'), output_file.name))
def wait_until_element_is_not_visible( self, locator, timeout=12, poll_frequency=0.5): """Wrapper around Selenium's WebDriver that allows us to pause our test until specified element will disappear. That means that it will not be present and will not be visible anymore. :param locator: Locator of element under test :param timeout: How long this method should wait for the element to disappear (in seconds) :param poll_frequency: How frequently this method should check for the presence of the element (in seconds) :returns: If the page element still present after timeout expired, return None. Otherwise, return True. """ try: WebDriverWait(self.browser, timeout, poll_frequency).until( expected_conditions.invisibility_of_element_located(locator)) self.wait_for_ajax(poll_frequency=poll_frequency) return True except TimeoutException as err: self.logger.debug( "%s: Timed out waiting for element '%s' to disappear.", type(err).__name__, locator[1] ) return None
def inserimento_vendite(self): '''Procedura di immissione delle vendite su adriaticapress ''' self.dr.get('{}Vendita.htm'.format(ip_ap)) time.sleep(5) elemento_controllo = WebDriverWait(self.dr, 300).until(EC.invisibility_of_element_located((By.ID, 'loaderBodyPage'))) time.sleep(5) self.dr.find_element_by_id('imgMostraRicerca').click() input_ean = self.dr.find_element_by_name('txtTitoloRI') input_qtt = self.dr.find_element_by_name('txtQ') wb = load_workbook(PATH_FILE_VENDITE) ws = wb.get_sheet_by_name('ExportExcel') righe_con_dati = ws.max_row - 1 for riga in ws.iter_rows(min_row=3, max_row=righe_con_dati): descrizione, ean, copie = riga time.sleep(2) input_ean.clear() input_ean.send_keys(ean.value) input_qtt.clear() input_qtt.send_keys(copie.value) input_ean.send_keys(Keys.RETURN) os.remove(PATH_FILE_VENDITE) time.sleep(3) self.dr.find_element_by_id('ibCassa').click() return self.mio_testo.insertPlainText('{} Vendite caricate\n'.format(time.strftime('%H:%M')))
def wait_for(self, selector=None, everywhere=False, timeout=20, xpath=None, for_invisible=False): if self.cur_route and not everywhere: selector = self.cur_route + " " + selector time.sleep(0.5) if selector: _by = By.CSS_SELECTOR if xpath: _by = By.XPATH selector = xpath try: if not for_invisible: elem = self.get_wait(timeout).until( EC.presence_of_element_located((_by, selector))) else: elem = self.get_wait(timeout).until( EC.invisibility_of_element_located((_by, selector))) return elem except Exception as e: # body = self.driver.find_element_by_id('body_div') # print(body.get_attribute('innerHTML')) self.print_console() raise e
def click_flag_button(self): """ Clicks the Flag button. """ self._wait.until(ec.invisibility_of_element_located(self._flag_selected_button)) self._driver.find_element(*self._flag_button).click() self._wait.until(ec.visibility_of_element_located(self._flag_selected_button))
def close_modal(self): self._confirm_modal() _close = self._webd_wrap._driver.find_element_by_class_name('fancybox-skin').find_element_by_xpath('a') self._webd_wrap._driver.execute_script("(arguments[0]).click()", _close) self._webd_wrap.wait.until(EC.invisibility_of_element_located((By.CLASS_NAME, 'fancybox-inner')))
def click_create_new_version_button(self): """ Clicks Create New Version button. """ self._driver.find_element(*self._create_new_version_button).click() self._wait.until(ec.invisibility_of_element_located(self._create_new_version_button)) self._wait.until(ec.visibility_of_element_located(self._version_tab))
def test_name_filter_works(self): text_to_find, text_to_not_find = self.search_test_helper() # o should be in both of the experiences self.client.get(reverse('search') + '?search=' + 'o') name_filter = self.driver.find_element( By.XPATH, '//table[@id="search-results"]//td[position()=%i]//*[contains(@class, "tablesorter-filter")]' % self.get_name_column_index() ) # verify the element is shown self.assertTrue( self.get_table_entries_by_name(text_to_not_find)[0].is_displayed(), 'The element should first be displayed to later be hidden.' ) name_filter.send_keys(text_to_find) name_filter.send_keys(Keys.RETURN) # verify the element is not shown wait = WebDriverWait(self.driver, 1) wait.until( expected_conditions.invisibility_of_element_located( (By.XPATH, self.get_table_entries_by_name_xpath(text_to_not_find)) ) ) self.assertFalse( self.get_table_entries_by_name(text_to_not_find)[0].is_displayed(), 'The element should not be visible.' )
def hide_tooltip(self, css_selector): """Hide the tooltip by moving to a tooltip-less element.""" # The below element (ui-id-1) is specific to Options page. el_no_hover = self.driver.find_element_by_id("ui-id-1") ActionChains(self.driver).move_to_element(el_no_hover).perform() WebDriverWait(self.driver, 5).until(EC.invisibility_of_element_located( (By.CSS_SELECTOR, css_selector)))
def wait_for_spinner_absence(self): element = None try: element = WebDriverWait(self.driver, self.maxwait).until(EC.invisibility_of_element_located((By.ID, 'spinner'))) except TimeoutException: raise ElementTimeoutException("spinner") return element
def submit(self): self.wait.until( EC.invisibility_of_element_located(self.MENU_TERM) and EC.invisibility_of_element_located(self.MENU_PURPOSE)) self.click(*self.SUBMIT) return CompanySearch(self.driver_adapter)
def wait_until(self): wait = WebDriverWait(self.driver, 100) wait.until(EC.invisibility_of_element_located((By.XPATH, Locators.wait_xpath)))
Unsuccessful_Application_Downloads.append(FirstLast_Name.value) print( str(datetime.datetime.now().strftime("%I:%M:%S %p")) + " Download of " + str(FirstLast_Name.value) + "'s application was unsuccessful.") continue try: download_button = driver.find_element_by_xpath( "//*[@title='Bulk Download']") download_button.click() PDF_button = driver.find_element_by_xpath("//button/mat-icon[1]") PDF_button.click() element = WebDriverWait(driver, 150).until( EC.invisibility_of_element_located( (By.XPATH, "//*[@class='spinner-container ng-star-inserted']"))) time.sleep(1.5) except: EC.visibility_of_element_located( (By.XPATH, "//*[@class='spinner-container ng-star-inserted']")) print("still loading") htmlElem = driver.find_element_by_tag_name('html') htmlElem.send_keys(Keys.F5) driver.get( "https://ogs.sgs.utoronto.ca/applicant/(main:submitted-forms)") try: element = WebDriverWait(driver, 120).until( EC.presence_of_element_located( (By.ID, "cdk-accordion-child-0")))
"#listMenu-id-2 > li:nth-child(2) > a:nth-child(1)"))) wd.find_element_by_css_selector( "#listMenu-id-2 > li:nth-child(2) > a:nth-child(1)").click() # switch to article page, get html wd.switch_to_window(wd.window_handles[2]) html = re.sub(r'<style.*<\/style>', '', unicode(wd.page_source).encode("utf-8")) html = re.sub(r'<input.*/>', '', html) document = open(str(dest) + '/data' + str(doc_id) + '.html', 'w') document.write(html) document.close() wd.close() # go back and click the next button doc_id += 1 wd.switch_to_window(wd.window_handles[1]) wd.find_element_by_css_selector("#clearAll > input:nth-child(1)").click() wait.until( EC.visibility_of_element_located( (By.CSS_SELECTOR, "#selectAll > input:nth-child(1)"))) wd.find_element_by_css_selector("a.nextItem").click() try: wait.until( EC.invisibility_of_element_located(( By.CSS_SELECTOR, "#_ceprogressindicator > td:nth-child(1) > div:nth-child(1) > img:nth-child(1)" ))) except: time.sleep(2)
def is_invisibility(self, locator, timeout=10): '''元素不可见返回True,可见返回本身''' result = WebDriverWait(self.driver, timeout, 1).until( EC.invisibility_of_element_located(locator)) return result
def select_submenu(self, submenu_link): self.browser.find_element_by_xpath(self.sub_menu_xpath % submenu_link).click() # wait until submenu page is opened WebDriverWait(self.browser, 10).until( EC.invisibility_of_element_located(self.main_tab))
def wait_until_element_located_disappear(driver, locator: str, by=By.ID): WebDriverWait(driver, 2).until( expected_conditions.invisibility_of_element_located((by, locator)))
def test_user_ranking_course(driver): '''Creates a course and students to participate make submits to problems''' run_id = driver.generate_id() course_alias = f'ut_rank_course_{run_id}' school_name = f'ut_rank_school_{run_id}' assignment_alias = f'ut_rank_hw_{run_id}' problem = 'sumas' _setup_course(driver, course_alias, school_name, assignment_alias, problem) with driver.login_user(): enter_course(driver, course_alias, assignment_alias) _click_on_problem(driver, problem) util.create_run(driver, problem, 'Main.cpp17-gcc') driver.update_score_in_course(problem, assignment_alias) # Refresh the current page. with driver.page_transition(): driver.browser.get(driver.browser.current_url.split('#')[0]) _click_on_problem(driver, problem) # When user has tried or solved a problem, feedback popup will be shown with util.dismiss_status(driver): driver.wait.until( EC.element_to_be_clickable( (By.CSS_SELECTOR, '.popup button.close'))).click() driver.wait.until( EC.invisibility_of_element_located( (By.CSS_SELECTOR, '.popup button.close'))) driver.wait.until( EC.element_to_be_clickable( (By.XPATH, ('//a[contains(text(), "%s")]/parent::div' % problem.title())))).click() driver.wait.until( EC.element_to_be_clickable( (By.CSS_SELECTOR, 'button[data-run-details]'))).click() assert (('show-run:') in driver.browser.current_url), driver.browser.current_url update_scoreboard_for_assignment(driver, assignment_alias, course_alias) with driver.login_admin(): enter_course_assignments_page(driver, course_alias) with driver.page_transition(): driver.wait.until( EC.element_to_be_clickable( (By.XPATH, '//a[contains(@href, "/assignment/%s/scoreboard/")]' % assignment_alias))).click() toggle_contestants_element = driver.wait.until( EC.element_to_be_clickable( (By.CSS_SELECTOR, 'input.toggle-contestants'))) for _ in range(10): toggle_contestants_element.click() if not toggle_contestants_element.is_selected(): break else: logging.error('Failed to toggle contestants') run_user = driver.browser.find_element_by_xpath( '//td[contains(@class, "accepted")]/preceding-sibling::td[@class=' '"user"]') assert run_user.text == driver.user_username, run_user url = '/course/{}/assignment/{}/scoreboard'.format( course_alias, assignment_alias) enter_course_assignments_page(driver, course_alias) util.check_scoreboard_events(driver, assignment_alias, url, num_elements=1, scoreboard='Public') enter_course_assignments_page(driver, course_alias) util.check_scoreboard_events(driver, assignment_alias, url, num_elements=1, scoreboard='Admin') enter_course_assignments_page(driver, course_alias) with driver.page_transition(): driver.wait.until( EC.element_to_be_clickable( (By.XPATH, '//a[contains(@href, "/course/%s/edit/")]' % course_alias))).click() driver.wait.until( EC.element_to_be_clickable(( By.XPATH, '//input[@name = "show-scoreboard"][@value="true"]'))).click() driver.browser.find_element_by_tag_name('form').submit() assert (('/course/%s/edit/' % course_alias) in driver.browser.current_url), driver.browser.current_url with driver.login_user(): enter_course(driver, course_alias, assignment_alias, first_time=False) for _ in range(10): driver.wait.until( EC.element_to_be_clickable( (By.XPATH, ('//a[contains(@href, "#ranking")]')))).click() if driver.browser.current_url.endswith(f'#ranking'): break assert (('#ranking') in driver.browser.current_url), driver.browser.current_url
def scrape(): fileWatcherProcess = Process(target=__event_watcher.startObserver, args=()) fileWatcherProcess.start() df_map = pd.read_excel(f'{constants.excelSaveLocation}/portfolio.xlsx', sheet_name=None) stocks = df_map.get("Stocks", None) # Scrape Nasdaq Nordic fp = webdriver.FirefoxProfile() # Set browser preferences fp.set_preference("browser.preferences.instantApply", True) fp.set_preference( "browser.helperApps.neverAsk.saveToDisk", "text/plain, application/octet-stream, application/binary, text/csv, application/csv, application/excel, text/comma-separated-values, text/xml, application/xml, application/pdf, text/html, application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8" ) fp.set_preference("browser.helperApps.alwaysAsk.force", False) fp.set_preference("browser.download.manager.showWhenStarting", False) fp.set_preference("browser.download.dir", constants.pdfDownloadDir) fp.set_preference("pdfjs.disabled", True) # Use this to disable Acrobat plugin for previewing PDF:s in Firefox (if you have Adobe reader installed on your computer) fp.set_preference("plugin.scan.Acrobat", "99.0") fp.set_preference("plugin.scan.plid.all", False) # 0 desktop, 1 Default Download, 2 User defined fp.set_preference("browser.download.folderList", 2) opt = webdriver.FirefoxOptions() opt.add_argument('-headless') browser = webdriver.Firefox(options=opt, firefox_profile=fp, service_log_path=constants.GECKO_LOG_PATH) # poll for elements for -- seconds max, before shutdown browser.implicitly_wait(0) wait = WebDriverWait(browser, 35) latest_button_xpath = "" def switchToMorningstarFrame(): morningstarFrameXPATH = '//*[@id="MorningstarIFrame"]' retries = 0 while retries < 5: try: print('Waiting for iFrame and iFrame Tables:') print('Attempt Number:', retries + 1) # wait for iFrame to be available wait.until( EC.frame_to_be_available_and_switch_to_it( (By.XPATH, morningstarFrameXPATH))) # wait for all tables to load wait.until( EC.visibility_of_all_elements_located( (By.XPATH, "//table"))) waitforload(browser, 10) return except (UnexpectedAlertPresentException, TimeoutException) as e: browser.refresh() retries += 1 print(latest_button_xpath) clickElement(browser, latest_button_xpath, 5) raise (e) url = "http://www.nasdaqomxnordic.com/shares" try: browser.get(url) midCapXPATH = "/html/body/section/div/div/div/section/div/article/div/section/form/div[4]/ul/li[2]" smallCapXPATH = "/html/body/section/div/div/div/section/div/article/div/section/form/div[4]/ul/li[3]" clickElement(browser, midCapXPATH, 5) clickElement(browser, smallCapXPATH, 5) ## Wait until table loading dissapears loadingImgXPATH = "/html/body/section/div/div/div/section/div/article/div/div[2]/img" wait.until( EC.invisibility_of_element_located((By.XPATH, loadingImgXPATH))) ## add links to dicts foundAssetsDict = {} notFound = [] print("Searching For Assets In Main Market...") for assetName in stocks['Asset']: try: asset = browser.find_element( By.XPATH, f'/html/body/section/div/div/div/section/div/article/div/div[2]/table[1]/tbody/tr/td/a[.="{assetName}"]' ) #add to dict foundAssetsDict[str(asset.get_attribute( "innerHTML")).strip()] = asset.get_attribute("href") except NoSuchElementException: print(f'Could not find {assetName} in Main Market') notFound.append(assetName) if len(notFound) > 0: print("Searching For Assets In First North...") firstNorthXPATH = '/html/body/section/div/div/div/section/div/article/div/section/form/div[1]/div/label[2]' clickElement(browser, firstNorthXPATH, 5) firstNorthGMXPATH = latest_button_xpath = "/html/body/section/div/div/div/section/div/article/div/section/form/div[5]/ul/li[2]" clickElement(browser, firstNorthGMXPATH, 5) ## Wait until table loading dissapears wait.until( EC.invisibility_of_element_located( (By.XPATH, loadingImgXPATH))) for assetName in notFound: try: asset = browser.find_element( By.XPATH, f'/html/body/section/div/div/div/section/div/article/div/div[2]/table[1]/tbody/tr/td/a[.="{assetName}"]' ) #add to dict foundAssetsDict[str(asset.get_attribute( "innerHTML")).strip()] = asset.get_attribute("href") except NoSuchElementException: print("couldn't find: ", assetName, "in First North") # EXTRACT RATIOS for asset, href in foundAssetsDict.items(): # go to asset page browser.get(href) keyRatiosXPATH = latest_button_xpath = "/html/body/section/div/div/div/section/section/section/nav/ul/li[4]/a" clickElement(browser, keyRatiosXPATH, 5) # Switch to iFrame containing morningstar data switchToMorningstarFrame() # Get Page Source keyRatiosPage = browser.page_source soup = BeautifulSoup(keyRatiosPage, 'lxml') Utils.saveTxtFile(str(soup.prettify()), f'{asset}_keyRatios') # Save file # switch back to original frame browser.switch_to.default_content() overviewXPATH = latest_button_xpath = "/html/body/section/div/div/div/section/section/section/nav/ul/li[2]/a" clickElement(browser, overviewXPATH, 5) switchToMorningstarFrame() # Make sure company profile has loaded companyProfileXPATH = "/html/body/div[2]/div[2]/form/div[4]/div[2]/div/div/div[3]/div[3]/div[1]/h2" wait.until( EC.text_to_be_present_in_element( (By.XPATH, companyProfileXPATH), "Company Profile")) wait.until( EC.presence_of_element_located( (By.XPATH, '//*[@id="CompanyProfile"]'))) overviewPage = browser.page_source soup = BeautifulSoup(overviewPage, 'lxml') Utils.saveTxtFile(str(soup.prettify()), f'{asset}_overview') # switch back to original frame browser.switch_to.default_content() companyFinancialsXPATH = latest_button_xpath = '/html/body/section/div/div/div/section/section/section/nav/ul/li[5]/a' clickElement(browser, companyFinancialsXPATH, 5) switchToMorningstarFrame() # Make sure table content loads incomeStatementCaptionXPATH = "/html/body/div[2]/div[2]/form/div[4]/div[2]/div/div/div[3]/div[2]/table/caption" wait.until( EC.text_to_be_present_in_element( (By.XPATH, incomeStatementCaptionXPATH), "Income Statement")) financialsPage = browser.page_source soup = BeautifulSoup(financialsPage, 'lxml') Utils.saveTxtFile(str(soup.prettify()), f'{asset}_financials') # switch back to original frame browser.switch_to.default_content() # Download Fact Sheet factsheetLinkXPATH = "/html/body/section/div/div/div/section/section/section/nav/ul/li[6]/a" #click instantly downloads because of browser preferences clickElement(browser, factsheetLinkXPATH, 5) browser.quit() fileWatcherProcess.terminate() saveStockInfoToExcel() except Exception as e: Utils.log_error(e) browser.quit() sys.exit(e)
def wait_until_status_message_hidden(self): self.wait().until( ec.invisibility_of_element_located( (by.By.ID, 'gcb-butterbar-message'))) return self
def wait_until_busy_indicator_is_completed(self): self.wait.until(EC.invisibility_of_element_located((By.XPATH, '//div[contains(@class,"pega_ui_busyIndicator") and @style="visibility: visible;"]')))
def verify_product_removed(self): self.click(*self.REMOVE_BTN) self.driver.wait.until( EC.invisibility_of_element_located(self.PROD_IN_CART))
def select_purpose(self, purpose): self.click(*self.PURPOSE_DROPDOWN) self.click(*(By.XPATH, "//li[@data-testid='{0}']".format(purpose))) self.wait.until(EC.invisibility_of_element_located(self.MENU_PURPOSE))
def join_game(self, room_id: Optional[int], avatar_id: Optional[int] = 0) -> None: print(f'Entrando {"na sala" if room_id is not None else ""}...') self.driver.get( f'{Constants.url}{room_id if room_id is not None else ""}') wait = WebDriverWait(self.driver, 10) # entre anônimo wait.until( ec.presence_of_element_located((By.XPATH, Constants.enter_button))) self.driver.find_element_by_xpath(Constants.enter_button).click() wait.until( ec.invisibility_of_element_located( (By.XPATH, Constants.loading_animation))) # username user_input = Constants.username_input if room_id is None else Constants.username_input2 if self.username is not None and 2 <= len(self.username) <= 15: wait.until(ec.presence_of_element_located((By.XPATH, user_input))) self.driver.find_element_by_xpath(user_input).clear() self.driver.find_element_by_xpath(user_input).send_keys( self.username) else: self.username = self.driver.find_element_by_xpath( user_input).get_attribute('value') # Avatar if 1 <= avatar_id <= 36: time.sleep(2) # Botão edit => abre menu avatar wait.until( ec.element_to_be_clickable( (By.XPATH, Constants.avatar_edit_button))) self.driver.find_element_by_xpath( Constants.avatar_edit_button).click() # Icone do Avatar if avatar_id > 14: self.driver.execute_script( 'arguments[0].scrollIntoView(true);', self.driver.find_element_by_xpath( Constants.avatar(avatar_id))) wait.until( ec.element_to_be_clickable( (By.XPATH, Constants.avatar(avatar_id)))) self.driver.find_element_by_xpath( Constants.avatar(avatar_id)).click() # Botão confirmar escolha wait.until( ec.element_to_be_clickable( (By.XPATH, Constants.avatar_confirm_button))) self.driver.find_element_by_xpath( Constants.avatar_confirm_button).click() # Esperar a animação wait.until( ec.invisibility_of_element_located( (By.XPATH, Constants.fade_animation))) time.sleep(2) # Botão Jogar => entra no jogo play_button = Constants.play_button if room_id is None else Constants.play_button2 wait.until(ec.element_to_be_clickable((By.XPATH, play_button))) time.sleep(2) self.driver.find_element_by_xpath(play_button).click() print(f'Logado como: {self.username}')
def assassult(self): current_toxic = self.browser.find_element_by_xpath( '//div[@class="user_profile_progressbar progressbar"]//div[@id="addiction-progressbar"]' ).value_of_css_property("width") percent_toxic = round(100 * float(current_toxic[:-2]) / 128) try: if percent_toxic > 9: self.toxic() else: try: but = WebDriverWait(self.browser, 5).until( EC.visibility_of_element_located( (By.XPATH, '//div[@id="menu-sprite-robbery"]'))) if but: but.click() select = WebDriverWait(self.browser, 20).until( EC.presence_of_all_elements_located(( By.XPATH, "//div[@id='content_middle']//div//div[4]//table//tr//td//select[@id='singlerobbery-select-robbery']//option" ))) if select: #/// all options available under dropdown last = None for option in select: #// gets last iterator if "100" in option.text and "25" in option.text: last = option.text stamina_cost = last.index("-") final_stamina_cost = last[ int(stamina_cost + 2):int(stamina_cost + 4)] #/// gets the required cost drop_menu = WebDriverWait(self.browser, 20).until( EC.presence_of_element_located(( By.XPATH, "//div[@id='content_middle']//div//div[4]//table//tr//td//select[@id='singlerobbery-select-robbery']" ))) DropDown = Select( drop_menu) #/// navigates to drop down menu if DropDown: self.current_stamina = self.browser.find_element_by_xpath( '//div[@class="user_profile_progressbar progressbar"]//div[@id="stamina-progressbar"]' ).value_of_css_property("width") self.percent_stamina = round( 100 * float(self.current_stamina[:-2]) / 128) DropDown.select_by_visible_text( last ) #//// picks the last element with 100% of chance to rob if self.percent_stamina > int( final_stamina_cost) - 1: try: stamina_cost = last.index( "-" ) #// gets the index to estimate number position final_stamina_cost = last[int( stamina_cost + 2 ):int(stamina_cost + 4)] #/// gets the required cost for x in range( round(self.percent_stamina / int(final_stamina_cost)) ): #// estimates possible tries WebDriverWait( self.browser, 20 ).until( EC.element_to_be_clickable(( By.XPATH, "//tr//table//tr//button[@id='singlerobbery-rob']" ))).click() self.assassult() except StaleElementReferenceException or ElementClickInterceptedException: WebDriverWait(self.browser, 20).until( EC.invisibility_of_element_located( (By.CLASS_NAME, "overlay"))) self.assassult() else: self.restore_stamina() self.restore() self.assassult() except ElementClickInterceptedException or StaleElementReferenceException: WebDriverWait(self.browser, 20).until( EC.invisibility_of_element_located( (By.CLASS_NAME, "overlay"))) self.assassult() except: raise
def corporate_dir(account): link_, listy_, info = [], [], [] #driver = webdriver.Chrome(executable_path = '/Users/macbook/Desktop/BBB/chromedriver') chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.binary_location = '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary' driver = webdriver.Chrome( executable_path='/Users/macbook/Desktop/BBB/chromedriver', chrome_options=chrome_options) try: driver.get("https://corporatedir.com/") WebDriverWait(driver, 5).until( EC.element_to_be_clickable( (By.XPATH, "//a[contains(text(), 'Welcome Guest')]"))) element = driver.find_element_by_xpath( "//a[contains(text(), 'Welcome Guest')]") element.click() WebDriverWait(driver, 5).until( EC.element_to_be_clickable( (By.XPATH, "//*[contains(text(), 'LOGIN')]"))) element = driver.find_element_by_xpath( "//*[contains(text(), 'LOGIN')]") element.click() WebDriverWait(driver, 20).until( EC.visibility_of_element_located((By.ID, "email"))) driver.find_element_by_id("email").send_keys( "*****@*****.**") driver.find_element_by_id("passsword").send_keys("Prihanna22") driver.find_element_by_xpath("//button[@name='login']").click() except TimeoutException: print("here") return info except WebDriverException: driver.quit() return info #driver.implicitly_wait(100) try: WebDriverWait(driver, 20).until( EC.invisibility_of_element_located((By.ID, "email"))) driver.find_element_by_id("search").send_keys(account) WebDriverWait(driver, 5).until( EC.element_to_be_clickable((By.XPATH, "//button[@name='result']"))) driver.find_element_by_xpath("//button[@name='result']").click() except (TimeoutException, WebDriverException) as e: return info if is_element_present(driver, By.ID, "myTable"): html = driver.page_source soup = BeautifulSoup(html, "lxml") table = soup.find("table", id='myTable') trs = table.find_all("tr") for tr in trs[1:]: dict_ = {} link = tr.find("a") link = re.findall(r'"(.*?)"', str(link))[0].strip() #print(link) if link.find(account.split(" ")[0].lower() + "-") > -1: link_.append(link) #print(listy_) for link in link_[0:5]: #print(set(link_)) details_dict, name, _dict = [], [], {} try: driver.get(link) except Exception: print("connection reset error") continue html = driver.page_source soup = BeautifulSoup(html, "lxml") table = soup.find( "table", class_="table table-hover table-bordered table-striped") keys = table.find_all("th") values = table.find_all("td") for i in range(0, len(keys) - 1): _dict[keys[i].get_text().replace(".", "")] = values[i].get_text() #details_dict.append(_dict) details = soup.find("div", class_='panel-body') ps = details.find_all("p") for p in ps: a = p.find_all("a") for a_ in a: name.append(a_.get_text()) _dict["name"] = name try: driver.find_element_by_id("contact").click() WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, 'setemail'))) email = driver.find_element_by_xpath( "//div[@id='setemail']").get_attribute('innerText') _dict["email"] = email.replace("Email - ", "") except Exception: continue #print("email",email) info.append(_dict) else: print("no records present") driver.quit() return info
def find_contact(self, name): # 删除人员,返回通讯录页面后,等待页面刷新删除后的通讯录名单 locator = (MobileBy.XPATH, f'//*[@text="{name}"]') result = WebDriverWait(self.driver, 10).until( expected_conditions.invisibility_of_element_located(locator)) return result
from bs4 import BeautifulSoup as Soup from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time driver = webdriver.Chrome('/Users/vigneshnatarajan/Downloads/chromedriver') driver.get('https://www.ilcollege2career.com/#/') first_click = WebDriverWait(driver, 10).until( EC.element_to_be_clickable( (By.XPATH, '//*[@id="tutorial-modal"]/div/div/div/div[3]/button[2]'))) first_click.click() invisible = WebDriverWait(driver, 10).until( EC.invisibility_of_element_located((By.ID, 'tutorial-modal'))) if invisible: Year4_click = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, '4year'))) Year4_click.click() count = 1 university, major, average_salary, salary_growth = [], [], [], [] while count < 29: select = Select(driver.find_element_by_xpath('//*[@id="program-1"]')) if count > 1: WebDriverWait(driver, 10).until( EC.visibility_of_element_located( (By.XPATH, '//*[@id="program-1"]/option[3]'))) select.select_by_visible_text('Agriculture & Related')
def wait_spinner(driver): sleep(0.11) # Enough time for the spinner to show up. WebDriverWait(driver, 10).until( EC.invisibility_of_element_located((By.ID, 'spinner')))
By.CSS_SELECTOR, "#MenuBar1 > li:nth-child(5) > ul > li:nth-child(3) > ul > li:nth-child(1) > a" ))) ## 請假資料維護 li3 = browser.find_element_by_css_selector( "#MenuBar1 > li:nth-child(5) > ul > li:nth-child(3) > ul > li:nth-child(1) > a" ) ActionChains(browser).move_to_element_with_offset( li3, 10, -10).move_to_element_with_offset(li3, 10, 10).perform() li3.click() ## 移出左方列表使浮出列表消失 li4 = browser.find_element_by_css_selector("#MenuBar1 > li:nth-child(1) > a") ActionChains(browser).move_to_element_with_offset(li4, 10, -10).perform() element = wait.until( EC.invisibility_of_element_located( (By.CSS_SELECTOR, "#MenuBar1 > li:nth-child(5) > ul > li:nth-child(3) > a"))) switch_to_iframe(browser) browser.find_element_by_link_text("[請假資料查詢、編輯]").click() # In[7]: # Select 救災救護指揮中心 select = Select(browser.find_element_by_id("unit")) select.select_by_visible_text("救災救護指揮中心") # Select all members selAllPerson = browser.find_element_by_id('selAll').click() # In[8]:
def banblockStory(browser, decision, tier, banblock_reason, banblock_detail, banblock_observed_loc, review_author, comment, unreviewed_flag): # Identifiers review_button_identifier = id_sr.reviewbutton_xpath() updatereview_button_identifier = id_sr.updatereviewbutton_xpath() radio_identifier = id_sr.reviewradio_xpath(decision) tier_dropdown_identifier = id_sr.blockedtierdropdown_xpath() violation_checkbox_identifier = id_sr.violationcheckbox_xpath(banblock_reason) violationdetail_checkbox_identifier = id_sr.violationdetailcheckbox_xpath(banblock_reason, banblock_detail) violationloc_input_identifier = id_sr.violationlocinput_xpath(banblock_reason) reviewauthor_input_identifier = id_sr.reviewauthorinput_xpath() reviewcomment_input_identifier = id_sr.reviewcommentinput_xpath() reviewsubmit_button_identifier = id_sr.reviewsubmitbutton_xpath() search_button_identifier = id_sr.searchbutton_xpath() review_form_identifier = id_sr.reviewform_xpath() # If this is in the Unreviewed tab, find the "Review" button if unreviewed_flag == True: # Press Review Button WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, review_button_identifier))) review_button = browser.find_element_by_xpath(review_button_identifier) review_button.click() # If this is in other tabs, find the "Update Review" button elif unreviewed_flag == False: WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, updatereview_button_identifier))) updatereview_button = browser.find_element_by_xpath(updatereview_button_identifier) updatereview_button.click() # Press "decision" radio WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, radio_identifier))) approve_radio = browser.find_element_by_xpath(radio_identifier) approve_radio.click() # If decision is "blocked", choose a tier if decision == "blocked": WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, tier_dropdown_identifier))) sel = Select(browser.find_element_by_xpath(tier_dropdown_identifier)) sel.select_by_visible_text(tier) # Choose a Violation WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, violation_checkbox_identifier))) violation_checkbox = browser.find_element_by_xpath(violation_checkbox_identifier) violation_checkbox.click() # Choose a Violation Reason WebDriverWait(browser, 30).until(EC.element_to_be_clickable((By.XPATH, violationdetail_checkbox_identifier))) violationdetail_checkbox = browser.find_element_by_xpath(violationdetail_checkbox_identifier) violationdetail_checkbox.click() # Type the Violation Location WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, violationloc_input_identifier))) violationloc_input = browser.find_element_by_xpath(violationloc_input_identifier) violationloc_input.send_keys(banblock_observed_loc) # Input Review Author WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, reviewauthor_input_identifier))) reviewauthor_input = browser.find_element_by_xpath(reviewauthor_input_identifier) reviewauthor_input.send_keys(review_author) # Input Comment WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, reviewcomment_input_identifier))) reviewcomment_input = browser.find_element_by_xpath(reviewcomment_input_identifier) reviewcomment_input.send_keys(comment) # Submit Review WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, reviewsubmit_button_identifier))) reviewsubmit_button = browser.find_element_by_xpath(reviewsubmit_button_identifier) reviewsubmit_button.click() # Wait Until Review is Finished WebDriverWait(browser, 10).until(EC.invisibility_of_element_located((By.XPATH, review_form_identifier)))
def wait_until_hidden(self, element_tuple): self.wait.until(EC.invisibility_of_element_located(element_tuple))
driver.find_element_by_id("btnLogin").click() # Click on the Send Verification Code button driver.find_element_by_id("btnSendCode").click() # MARKET # Wait for home page transfer button to be located WebDriverWait(driver, 90).until( EC.visibility_of_element_located( (By.XPATH, '/html/body/main/section/nav/button[3]'))) time.sleep(5) # Wait for loader to be invisible WebDriverWait(driver, 40).until( EC.invisibility_of_element_located((By.ID, 'futweb-loader'))) time.sleep(5) # Click on transfer button driver.find_element_by_xpath("/html/body/main/section/nav/button[3]").click() time.sleep(5) # Click on transfer market button driver.find_element_by_xpath( "/html/body/main/section/section/div[2]/div/div/div[2]").click() time.sleep(1) # SEARCH FILTER time.sleep(1) # Click on country dropdown button
def wait_for_invisibility(self, selector): """Pause until the element identified by selector is invisible""" return _wait_for_condition( ec.invisibility_of_element_located((By.CSS_SELECTOR, selector)), self )
def waitfor_invisibility(self, element, by=By.CSS_SELECTOR): return self.wait10.until(EC.invisibility_of_element_located((by, element)))
def wait_for_invisible(self, locator): self.wait.until(EC.invisibility_of_element_located(locator))
def parse(self, response): self.driver.get(response.url) # Navigate to evaluation results WebDriverWait(self.driver, 5).until( EC.presence_of_element_located( (By.XPATH, '//*[@id="tdr_2_col_content"]/ul/li[2]/a'))) self.driver.find_element_by_xpath( '//*[@id="tdr_2_col_content"]/ul/li[2]/a').click() # Get a list of subjects/options to loop through options = self.driver.find_element_by_xpath( '//*[@id="ctl00_ContentPlaceHolder1_ddlDepartments"]' ).find_elements_by_tag_name('option') options.pop(0) # First option is empty/blank cape_dict = {} # Navigate each subject's capes for option in options: option.click() # Sometimes it gave me an error that the submit button wasn't attached to the DOM...So loop till it is element_is_stale = True while element_is_stale: try: WebDriverWait(self.driver, 60).until( EC.presence_of_element_located(( By.XPATH, '//*[@id="ctl00_ContentPlaceHolder1_btnSubmit"]'))) WebDriverWait(self.driver, 60).until( EC.element_to_be_clickable(( By.XPATH, '//*[@id="ctl00_ContentPlaceHolder1_btnSubmit"]'))) self.driver.find_element_by_xpath( '//*[@id="ctl00_ContentPlaceHolder1_btnSubmit"]' ).click() element_is_stale = False except StaleElementReferenceException: continue # Wait based on the red spinning thing appearing and then disappearing (it's loading results) WebDriverWait(self.driver, 30).until( EC.visibility_of_element_located(( By.XPATH, '//*[@id="ctl00_ContentPlaceHolder1_UpdateProgress1"]/div/div/img' ))) WebDriverWait(self.driver, 60).until( EC.invisibility_of_element_located(( By.XPATH, '//*[@id="ctl00_ContentPlaceHolder1_UpdateProgress1"]/div/div/img' ))) # Pass the web page navigated to by Selenium to Scrapy sel = scrapy.Selector(text=self.driver.page_source.encode('utf-8')) course_selectors = sel.xpath( '//*[@id="ctl00_ContentPlaceHolder1_gvCAPEs"]/tbody/tr') for course_selector in course_selectors: professor_name = course_selector.xpath( './/td[1]/text()').extract_first(default=None) full_course_name = course_selector.xpath( './/td[2]/a/text()').extract_first(default=None) course_subject = full_course_name[:full_course_name.index(' ')] course_number = full_course_name[( full_course_name.index(' ') + 1):(full_course_name.find('-') - 1)] course_name = full_course_name[(full_course_name.find('-') + 2):] term = course_selector.xpath('.//td[3]/text()').extract_first( default=None) recommend_class = course_selector.xpath( './/td[6]/span/text()').extract_first(default=float()) recommend_professor = course_selector.xpath( './/td[7]/span/text()').extract_first(default=float()) study_hours = course_selector.xpath( './/td[8]/span/text()').extract_first(default=float()) avg_grade_exp = course_selector.xpath( './/td[9]/span/text()').extract_first(default=float()) avg_grade_rec = course_selector.xpath( './/td[10]/span/text()').extract_first(default=float()) # Converting strings to numbers if study_hours: try: study_hours = float(study_hours) except ValueError: study_hours = float() if recommend_class: try: recommend_class = float(recommend_class[:-2]) except (IndexError, ValueError) as e: recommend_class = float() if recommend_professor: try: recommend_professor = float(recommend_professor[:-2]) except (IndexError, ValueError) as e: recommend_professor = float() if avg_grade_exp: try: avg_grade_exp = \ float(avg_grade_exp[(avg_grade_exp.index('(') + 1):(avg_grade_exp.index(')') - 1)]) except (IndexError, ValueError) as e: avg_grade_exp = float() if avg_grade_rec: try: avg_grade_rec = \ float(avg_grade_rec[(avg_grade_rec.index('(') + 1):(avg_grade_rec.index(')') - 1)]) except (IndexError, ValueError) as e: avg_grade_rec = float() # Some professor names have extra spaces. If they do delete them. if ' ' in professor_name: professor_name = professor_name[:professor_name.index(' ' )] new_cape_info = CapeInfo(course_name, course_number, course_subject, professor_name, recommend_class, recommend_professor, study_hours, avg_grade_exp, avg_grade_rec, term) # If this new cape info has the came course and professor then combine them, else add to hash table # String versions of the hash returned are used since it doesn't seem to work otherwise...Too big num? if cape_dict.get(str(hash(new_cape_info))): cape_dict[str(hash(new_cape_info))] = cape_dict[str( hash(new_cape_info))] + new_cape_info else: cape_dict[str(hash(new_cape_info))] = new_cape_info # Map cape objects to a dictionary format, so that it can be written as json to a file json_data = map(lambda capeObj: capeObj.get_dict(), list(cape_dict.values())) self.data.write(unicode(json.dumps(json_data, indent=4)))
def wait2_until(self): wait = WebDriverWait(self.driver, 100) wait.until(EC.invisibility_of_element_located((By.CLASS_NAME, Locators.wait2_class_name)))
def wait_until_throbbing_is_completed(self): self.wait.until(EC.invisibility_of_element_located((By.XPATH, '//ul[@class="throbber"]')))
def wait_until_element_is_invisible_by_locator(self, locator_tuple): wait = WebDriverWait(self.driver, 10) wait.until(EC.invisibility_of_element_located(locator_tuple))