def test_correct_or_message(browser: webdriver.Chrome, urls): browser.get(f'https://stepik.org/lesson/{urls}/step/1') browser.implicitly_wait(10) browser.find_element(By.CLASS_NAME, "textarea").send_keys(answer()) browser.find_element(By.CLASS_NAME, "submit-submission").click() feedback = browser.find_element(By.CLASS_NAME, "smart-hints__hint").text assert feedback == 'Correct!', f'Feedback is not "Correct!", real={feedback}'
def test_post_count_after_search(): # Uruchomienie przeglądarki Chrome. Ścieżka do chromedrivera # ustawiana automatycznie przez bibliotekę webdriver-manager browser = Chrome(executable_path=ChromeDriverManager().install()) # Otwarcie strony browser.get('https://www.awesome-testing.com/') # Inicjalizacja searchbara i przycisku search search_bar = browser.find_element(By.CSS_SELECTOR, 'input.gsc-input') search_button = browser.find_element(By.CSS_SELECTOR, 'input.gsc-search-button') # Szukanie search_bar.send_keys('cypress') search_button.click() # Czekanie na stronę wait = WebDriverWait(browser, 10) grey_status_bar = (By.CLASS_NAME, 'status-msg-body') wait.until( expected_conditions.visibility_of_element_located(grey_status_bar)) # Pobranie listy tytułów titles = browser.find_elements(By.CLASS_NAME, 'post-title') # Asercja że lista ma 3 elementy assert len(titles) == 3 # Zamknięcie przeglądarki browser.close()
def submit(chrome: Chrome, pob_url: str, account_name: str, character: str): chrome.get(pob_url) account_name_input = chrome.find_element(By.ID, 'accountName') character_input = chrome.find_element(By.ID, 'character') submit_button = chrome.find_element(By.ID, 'fsubmit') def pobcode(): # avoid selenium StaleElementException by using JS return chrome.execute_script( 'return document.getElementById("pobcode").textContent') assert pobcode() == '' account_name_input.send_keys(account_name) character_input.send_keys(character) submit_button.click() result = pobcode() # poll until pobcode.text becomes non-empty for i in range(30): if result: break time.sleep(0.1) result = pobcode() assert result != '' return result
def LoadProfile(driver: webdriver.Chrome, url: str) -> bool: """ Opens the specified LinkedIn profile, then moves around the page in order to load all the lazy-loaded content Args: driver (webdriver): The page's driver url (str): A linkedin profile """ driver.get(url) try: WebDriverWait(driver, consts.PAGE_LOAD_TIMEOUT).until( EC.presence_of_element_located( (By.CLASS_NAME, selectors.PAGE_LOADED))) except: try: driver.find_element(By.ID, "captcha-internal") ctypes.windll.user32.MessageBoxW( 0, "Captcha détécté.\n L'éxécution de du script reprendra lorsque vous appuierez sur le bouton \"OK\".", "HELP", (0x30 | 0x40000)) except: ctypes.windll.user32.MessageBoxW(0, "Erreur inconnue", "Erreur", (0x30 | 0x40000)) return False LoadLazyLoadedBlocks(driver) ExpandAllText(driver) return True
def is_in_add_page(driver: webdriver.Chrome) -> bool: """判断是否进入了添加成员页面""" if len(driver.find_elements(By.CSS_SELECTOR, '#username')) > 0: return True driver.find_element( By.CSS_SELECTOR, '[class|=ww_operationBar] .qui_btn.ww_btn.js_add_member').click() return False
def parse_jobs(driver: Chrome, user_link: str) -> List[str]: sleep(delay()) driver.get(user_link) driver.find_element_by_tag_name("body").send_keys(Keys.ESCAPE) # закроем поп-ап с предложением об оповещениях driver.find_element(By.XPATH, "//a[@data-tab-key='about']").click() sleep(delay()) driver.find_element(By.XPATH, "//a[@data-testid='nav_edu_work']").click() sleep(delay()) experience_list = driver.find_elements_by_class_name("experience") jobs = [parse_job(item) for item in experience_list] return jobs
def loginUpload(username, password, path_to_resume): '''open browser, login and upload resume ''' try: browser = Chrome(options=opts, executable_path=r'chromedriver.exe') browser.get('https://www.monsterindia.com/rio/login') browser.maximize_window() logger.info('Open url in chrome') time.sleep(5) usernameField = browser.find_element_by_id( "signInName") #('usernameField') usernameField.send_keys(username) logger.info('Entered username') passwordField = browser.find_element_by_id('password') passwordField.send_keys(password) logger.info('Entered password') browser.find_element_by_xpath("//*[@id='SignInForm']/div[2]").click() time.sleep(10) logger.info('Click login and wait for 5 sec') browser.find_element_by_xpath( '//*[@id="stickySidebar"]/div[1]/div/a').click() time.sleep(5) browser.find_element_by_xpath( '//*[@id="user-profile-right"]/div/div[2]/div[1]/div/a/i').click() time.sleep(5) try: browser.find_element_by_xpath('//*[@id="resume"]').send_keys( path_to_resume) time.sleep(5) browser.find_element(By.CSS_SELECTOR, ".form-control:nth-child(3) .pt10").click() time.sleep(5) browser.save_screenshot(updateimage) logger.info('Uploaded') except Exception as ex: logger.error('Error in login and cv upload: {}'.format(ex)) raise except Exception as ex: logger.error('Error in monsterindia cv upload- {}'.format(ex)) finally: browser.quit() logger.info('MonsterIndia End') logger.info('MonsterIndia End')
def get_last_report(browser: webdriver.Chrome, t): print('正在获取手机号...') browser.get('https://selfreport.shu.edu.cn/PersonInfo.aspx') time.sleep(1) # 手机号 ShouJHM = browser.find_element(By.ID, 'persinfo_ctl00_ShouJHM-inputEl').get_attribute('value') if NEED_BEFORE: print('开始补报,正在获取补报日期前一天的填报信息...') t = START_DT - dt.timedelta(days=1) else: print('正在获取前一天的填报信息...') t = t - dt.timedelta(days=1) browser.get(f'https://selfreport.shu.edu.cn/ViewDayReport.aspx?day={t.year}-{t.month}-{t.day}') time.sleep(1) # 是否在上海,在上海(校内),在上海(不在校内),不在上海 ShiFSH = browser.find_element(By.CSS_SELECTOR, '#ctl03_ShiFSH #ctl03_ShiFSH-inputEl').text # 是否住校 ShiFZX = 'f-checked' in browser.find_element(By.CSS_SELECTOR, '#ctl03_ShiFZX .f-field-checkbox-icon').get_attribute('class') # 省 ddlSheng = browser.find_element(By.CSS_SELECTOR, '#ctl03_ddlSheng #ctl03_ddlSheng-inputEl').get_attribute('value') # 市 ddlShi = browser.find_element(By.CSS_SELECTOR, '#ctl03_ddlShi #ctl03_ddlShi-inputEl').get_attribute('value') # 县 ddlXian = browser.find_element(By.CSS_SELECTOR, '#ctl03_ddlXian #ctl03_ddlXian-inputEl').get_attribute('value') # 详细地址 XiangXDZ = browser.find_element(By.CSS_SELECTOR, '#ctl03_XiangXDZ #ctl03_XiangXDZ-inputEl').get_attribute('value') # 是否家庭地址 ShiFZJ = 'f-checked' in browser.find_element(By.CSS_SELECTOR, '#ctl03_ShiFZJ .f-field-checkbox-icon').get_attribute('class') return ShouJHM, ShiFSH, ShiFZX, ddlSheng, ddlShi, ddlXian, XiangXDZ, ShiFZJ
def does_element_exist(driver: webdriver.Chrome, by_selector, identifier: str) -> bool: """ Function that checks if a element exists on the page :param driver: selenium.webdriver :param by :param identifier: either a ID attribute or an xPath :return: """ try: driver.find_element(by_selector, identifier) return True except common.exceptions.NoSuchElementException: return False
def check_element_exist(driver: webdriver.Chrome, path: str, by: str = 'xpath') -> bool: try: if by == 'xpath': driver.find_element_by_xpath(path) elif by == 'css': driver.find_element_by_css_selector(path) elif by == 'id': driver.find_element(By.ID, path) else: logger.info(f"Unable to check element using '{by}'") except NoSuchElementException: return False return True
def test_successful_login_to_crm(self): """Successful admin login""" driver = Chrome() driver.get('https://demo.django-crm.io/login/') email_input = driver.find_element(By.ID, 'exampleInputEmail1') password_input = driver.find_element(By.ID, 'exampleInputPassword1') login_button = driver.find_element_by_class_name('btn-danger') email_input.send_keys('*****@*****.**') password_input.send_keys('admin') login_button.submit() assert driver.find_element_by_id('contacts').is_displayed() sleep(2) driver.quit()
def test_post_count_on_cypress_label(): # Uruchomienie przeglądarki Chrome. Ścieżka do chromedrivera # ustawiana automatycznie przez bibliotekę webdriver-manager browser = Chrome(executable_path=ChromeDriverManager().install()) # Otwarcie strony browser.get('https://www.awesome-testing.com/') # Inicjalizacja elementu z labelką label = browser.find_element(By.LINK_TEXT, 'Cypress') # Kliknięcie na labelkę label.click() #Czekanie na stronę wait = WebDriverWait(browser, 10) grey_status_bar = (By.CLASS_NAME, 'status-msg-body') wait.until( expected_conditions.visibility_of_element_located(grey_status_bar)) # Pobranie listy tytułów titles = browser.find_elements(By.CSS_SELECTOR, 'input.gsc-input') # Asercja że lista ma 1 element assert len(titles) == 1 # Zamknięcie przeglądarki browser.close()
def discounts_hm(url, threshold_pct, sleep=1): browser = Chrome() browser.get(url) try: for x in range(100): more = browser.find_element(By.CSS_SELECTOR, 'button.js-load-more') if more.is_displayed(): more.click() browser.find_element_by_tag_name('body').send_keys(Keys.END) time.sleep(sleep) soup = BeautifulSoup(browser.execute_script('return document.documentElement.outerHTML'), 'html.parser') items = soup.find_all('li', class_='product-item') for item in items: prices = item.find('strong', class_='item-price') discount = parse_price(prices.find('span', class_='sale').text) regular = parse_price(prices.find('span', class_='regular').text) article = item.find('h3', class_='item-heading') uri = URI_SCHEME_NETLOC.format(uri=(urlparse(url))) + article.a['href'] if get_discount_pct(discount, regular) > threshold_pct: discounts.append(Discount(get_discount_pct(discount, regular), discount, article.a.text, uri)) except ElementClickInterceptedException as e: print(traceback.format_exc()) browser.close()
def add_more_information(self, driver: webdriver.Chrome): string_additional_info = '' if (self.question.input_type == HTMLConstants.InputTypes.CHECK_BOX) or \ (self.question.input_type == HTMLConstants.InputTypes.RADIO): list_spans: List[FirefoxWebElement] = driver.find_elements( By.XPATH, IndeedConstants.XPath.compute_xpath_radio_span(self.name)) list_spans = [ span for span in list_spans if span.get_attribute(HTMLConstants.Attributes.CLASS) != IndeedConstants.Class.HELP_BLOCK ] assert len(list_spans) == len(self.element_list) for i, span in enumerate(list_spans): string_additional_info += '{0}{1}'.format( span.get_attribute(HTMLConstants.Attributes.INNER_TEXT), ModelConstants.DELIMITER.ANSWER) elif self.question.tag_type == HTMLConstants.TagType.SELECT: select = Select(driver.find_element(By.NAME, self.name)) list_options: List[FirefoxWebElement] = select.options for option in list_options: string_additional_info += '{0}{1}'.format( option.get_attribute(HTMLConstants.Attributes.INNER_TEXT), ModelConstants.DELIMITER.ANSWER) self.question.additional_info = string_additional_info
class TestLogin: def __init__(self): self.driver = Chrome(executable_path='chromedriver.exe') def open_page(self, url): self.driver.get(url) self.driver.maximize_window() def close_all_browsers(self): self.driver.quit() def get_element(self, locator): by = locator.split(':')[0] value = ':'.join(locator.split(':')[1:]) return self.driver.find_element(by, value) def input_text(self, locator, text): element = self.get_element(locator) if element: element.send_keys(text) def click(self, locator): element = self.get_element(locator) if element: element.click() def is_element_present(self, locator): try: self.get_element(locator) except NoSuchElementException: print("Element does not present") return False return True
def open_in_new_tab(driver: webdriver.Chrome, by: By, identifier: str, ) -> bool: try: element_to_click = driver.find_element(by, identifier) ActionChains(driver).key_down(Keys.CONTROL).click(element_to_click).key_up(Keys.CONTROL).perform() return True except common.exceptions.NoSuchElementException: return False
def test_searching_in_duckduckgo(): # Uruchomienie przeglądarki Chrome. Ścieżka do chromedrivera # ustawiana automatycznie przez bibliotekę webdriver-manager browser = Chrome(executable_path=ChromeDriverManager().install()) # Otwarcie strony duckduckgo browser.get('https://duckduckgo.com/') # Znalezienie paska wyszukiwania search_form = browser.find_element(By.CSS_SELECTOR, '#search_form_input_homepage') # Znalezienie guzika wyszukiwania (lupki) search_button = browser.find_element_by_id('search_button_homepage') # Asercje że elementy są widoczne dla użytkownika assert search_form.is_displayed() assert search_button.is_displayed() is True # Szukanie Vistula University search_form.send_keys('Vistula University') search_button.click() # Sprawdzenie że akikolwiek wynik ma tytuł 'Vistula University in Warsaw' list = browser.find_elements(By.CSS_SELECTOR, '.result__title') list_of_titles = [] for i in list: list_of_titles.append(i.text) assert 'Vistula University in Warsaw' in list_of_titles assert list == 'Vistula University in Warsaw' # Zamknięcie przeglądarki browser.quit()
def discounts_tezyo(url, threshold_pct, price_limit=10000, sleep=2): browser = Chrome() browser.get(url) try: condition = True while condition is True: soup = BeautifulSoup(browser.execute_script('return document.documentElement.outerHTML'), 'html.parser') items = soup.find_all('li', class_='item') for item in items: price_p = item.find('p', class_='old-price') if price_p is None: continue regular = parse_price(price_p.span.text) discount = parse_price(item.find('span', class_='discount-price').span.text) article = item.find('div', class_='product-info') if get_discount_pct(discount, regular) > threshold_pct and discount < price_limit: discounts.append((Discount(get_discount_pct(discount, regular), discount, article.h2.text, article.a['href']))) pages = browser.find_element(By.CSS_SELECTOR, 'div.pages') next_page = pages.find_elements(By.CSS_SELECTOR, 'li')[-1] if next_page.is_displayed(): next_page.click() time.sleep(sleep) last_btn = soup.find('div', class_='pages').find_all('li')[-1] if last_btn.find('a', class_='next') is None: condition = False except ElementClickInterceptedException as e: print(traceback.format_exc()) browser.close()
class BotWeb(): def __init__(self): op = Options() op.headless = True self.driver = Chrome(options=op) self.driver.implicitly_wait(15) self.respostas = (By.CLASS_NAME,'WAC__bot-message') self.pergunta = (By.CLASS_NAME,'WAC__TextArea-textarea') self.btn = (By.ID,'WAC__send-button') self.WaitText = (By.CLASS_NAME, 'WAC__RichText') self.retorno = 'Did you mean:' self.retorno2 = 'Ainda não fui treinado para falar sobre esse assunto...' # self._url = 'https://web-chat.global.assistant.watson.cloud.ibm.com/preview.html?region=us-south&integrationID=d124b8aa-0744-44e5-9719-3c8675cc9403&serviceInstanceID=ae4691d0-deef-4df0-8b2f-666db7d5d7d6' self._url = 'https://bityli.com/KzdTC' def arquivoOK(self,text, resp): _conv = open('conversas_Ok.txt', 'a', encoding='utf-8') _conv.writelines(f"pergunta: {text},\n resposta: {resp}\n\n") _conv.close() def arquivo_Erro(self,text, resp): _conv = open('conversas_com_Erro.txt', 'a', encoding='utf-8') _conv.writelines(f"pergunta: {text},\n resposta: {resp}\n\n") _conv.close() def bot(self): self.driver.get(self._url) for per in conv: self.driver.find_element(*self.pergunta).send_keys(per) sleep(1) self.driver.find_element(*self.btn).click() sleep(3) teste = list(self.driver.find_elements(*self.WaitText)) frase = teste[-2].text if frase != self.retorno and frase != self.retorno2: self.arquivoOK(per, frase) print(per) print(frase) print('===' * 50) else: self.arquivo_Erro(per, frase) print(per) print(frase) print('===' * 50) self.driver.close() self.driver.quit()
def answer_all_questions(self, driver: webdriver.Chrome, job: Job, dict_qle: Dict[str, QuestionLabelElements]): # Initialize names = list(dict_qle.keys()) i = 0 name = names[i] list_continues: List[FirefoxWebElement] = driver.find_elements( By.XPATH, IndeedConstants.XPath.BUTTON_CONT) while True: qle = dict_qle[name] state = self._answer_question(driver, job, qle) if state == self.AnswerState.CANNOT_ANSWER: job.error = RobotConstants.String.UNABLE_TO_ANSWER return False if state == self.AnswerState.NOT_VISIBLE: for element_continue in list_continues: try: element_continue.click() break except common.exceptions.ElementNotVisibleException as e: pass except common.exceptions.NoSuchElementException as e: job.error = str(e) return False else: if i == len(names) - 1: try: driver.find_element( By.XPATH, IndeedConstants.XPath.BUTTON_APPLY).click() return True except common.exceptions.NoSuchElementException as e: job.error = str(e) return False except common.exceptions.ElementNotVisibleException as e: # TODO: Figure out why this happens driver.find_element( By.XPATH, IndeedConstants.XPath.BUTTON_CONT).click() i -= 1 i += 1 name = names[i]
def IsLoggedIn(driver: webdriver.Chrome) -> bool: """Returns true if the user is currently logged to LinkedIn Args: driver (Webdriver): The page's driver Returns: bool: Returns true if the user is currently logged to LinkedIn """ if ("linkedin.com" not in driver.current_url): driver.get("https://www.linkedin.com") try: driver.find_element(By.CLASS_NAME, selectors.SIGN_IN_BUTTON) return True except: return False
def test_button_add_basket(browser: webdriver.Chrome): link = 'http://selenium1py.pythonanywhere.com/catalogue/coders-at-work_207' browser.get(link) try: __ = browser.find_element(By.CSS_SELECTOR, 'button.btn-add-to-basket') except NoSuchElementException: assert False, 'Basket was not found'
class Whats: def __init__(self): self._url = 'https://web.whatsapp.com/' self.driver = Chrome() self.driver.implicitly_wait(30) self.bot = Bot() self.lista = (By.ID, 'pane-side') self.grupo_name = input('Insira o nome de um contato ou grupo: ') self.grupo = (By.XPATH, f"//span[@title='{self.grupo_name}']") self.Ler_mensagens = (By.XPATH, '//div[contains(@class,"message-in focusable-list-item")]') self.box_msg = (By.CLASS_NAME,'_3uMse') self.btn = (By.XPATH, f'//span[@data-icon="send"]') self.driver.get(self._url) sleep(10) def groupo(self): for grupos in self.driver.find_elements(*self.lista): grupos.find_element(*self.grupo).click() sleep(2) def ler_msg(self): conv = list() for total in self.driver.find_elements(*self.Ler_mensagens): conv.append(total.text.split('\n')[-1]) conv[-1].pop() # conv = '\n'.join(conv[-1][1:]) # if conv.startswith('Encaminhada'): # return conv.replace('Encaminhada','') # else: return conv[-1] def envia_msg(self, msg = None): if msg != None or msg != '': Box = self.driver.find_element(*self.box_msg) Box.click() Box.send_keys(msg+'\n') print(msg) else: pass def conversas(self): self.bot.aprender() conversas = set() self.groupo() self.envia_msg('Assistente iniciado!!') conversas.add('Assistente iniciado!!') print('Procurando Mensagens!!') while True: al = self.ler_msg() if al not in conversas: print(al) bot = self.bot.retorno_chat(al) conversas.add(al) conversas.add(str(bot)) self.envia_msg(str(bot))
def join_room(url, num): driver = Chrome(options=opts) driver.get(url) login = WebDriverWait(driver, 5, 1).until(EXPECTED) login.send_keys('selenium' + str(num)) btn = driver.find_element(By.CSS_SELECTOR, LOGIN_BUTTON) btn.click() sleep(TIME) leave_room(driver)
def __call__(self, brow: webdriver.Chrome): try: element = brow.find_element(*self.locator) element.click() return element except (ElementNotInteractableException, NoSuchElementException, ElementClickInterceptedException, StaleElementReferenceException): time.sleep(0.1) return False
class TestNavigation(StaticLiveServerTestCase): """ test Navigation from homepage """ def setUp(self): self.browser = Chrome() self.browser.implicitly_wait(10) def tearDown(self): self.browser.close() def test_bad_address_returns_handler404(self): """ Test bad address is caught by the handler and redirect to error page """ print(inspect.currentframe().f_code.co_name) response = self.browser.get('%s%s' % (self.live_server_url, '/test')) # message = self.browser.find_element_by_tag_name('h1').text self.assertTemplateUsed(response, 'errors/errors.html') def test_click_mentions(self): """ Test the click on mentions redirect to mentions page """ print(inspect.currentframe().f_code.co_name) self.browser.get(self.live_server_url) user_url = self.live_server_url + reverse('home_app:mentions') element = self.browser.find_element_by_partial_link_text('mentions') actions = ActionChains(self.browser) actions.move_to_element(element) actions.click(element) actions.perform() self.assertEquals(self.browser.current_url, user_url) def test_click_icon_person_to_user(self): """ Test click on the person image redirect to user page """ print(inspect.currentframe().f_code.co_name) self.browser.get(self.live_server_url) user_url = self.live_server_url + reverse('user_app:user') self.browser.find_element(By.CSS_SELECTOR, ".nav-item img").click() self.assertEquals(self.browser.current_url, user_url)
def _answer_message(self, driver: webdriver.Chrome, job: Job, qle: QuestionLabelElements) -> Enum: message = self.ab_builder.generate_message(job.description, job.company) if message is not None: try: driver.find_element(By.NAME, qle.name).send_keys(message) job.message = message return self.AnswerState.CONTINUE except common.exceptions.ElementNotVisibleException as e: return self.AnswerState.NOT_VISIBLE except common.exceptions.NoSuchElementException as e: job.error = str(e) return self.AnswerState.CANNOT_ANSWER else: job.error = RobotConstants.String.NOT_ENOUGH_KEYWORD_MATCHES return self.AnswerState.CANNOT_ANSWER
def GetContactName(driver: webdriver.Chrome) -> tuple: """Returns a contact's first and last name from a linkedin profile, as a tuple(firstname,lastname) Args: driver (webdriver): The page's driver Returns: tuple: (firstName, lastname) """ fullName: list = driver.find_element( By.CSS_SELECTOR, selectors.CONTACT_NAME).text.strip().split(' ') return (fullName[0], fullName[1])
def play_vtv(url): global driver try: driver.quit() except: print("something went wrong when quitting the driver") driver = Chrome() driver.get(url) try: play_button = driver.find_element(By.CSS_SELECTOR, "video.vjs-tech") play_button.click() sleep(0.5) full_screen_button = driver.find_element(By.CSS_SELECTOR, "button.vjs-fullscreen-control") full_screen_button.click() except: print("the button was probably unavailable")
def open_app(pincode): driver = Chrome() driver.get("https://selfregistration.cowin.gov.in/") mobile_no = driver.find_element( By.ID, "mat-input-0").send_keys("9551045397" + Keys.ENTER) otp_btn = driver.find_element_by_tag_name('ion-button').click() # sleep(2) # driver.find_element_by_tag_name('input').click() #click on otp field and be ready set_search(driver, pincode) filter_by_pincode(driver, pincode) # filter_by_district(driver) return True