def login_action(url): """ :param url: login website :return: """ driver = get_driver() driver.get(url) driver.find_element_by_css_selector("#login_field").clear() # username = str(input("Please enter your account: ")) # password = str(input("please enter your password: "******"#login_field").send_keys(username) sleep(2) driver.find_element_by_css_selector("#password").clear() driver.find_element_by_css_selector("#password").send_keys(password) driver.find_element_by_xpath("//input[@name='commit']").click() # explicit wait element = WebDriverWait(driver, 20, 0.5).until( EC.presence_of_element_located( (By.XPATH, "//a[contains(text(),'Pull requests')]"))) if element: print("Login successfully") sleep(3) # logout action # driver.find_element_by_xpath("//div[@class='Header-item position-relative mr-0']//span[@class='dropdown-caret']]").click() driver.find_element_by_xpath( "//header[@class='Header']/div[5]/details/summary").click() driver.find_element_by_xpath("//form[@class='logout-form']/button").click() # driver.find_element_by_xpath("//button[@class='dropdown-item dropdown-signout']").click() sleep(3) driver.close()
def locate_id_name(): """ locate by id or name :return: """ url = r'https://www.baidu.com' driver = get_driver() driver.get(url) # driver.find_element_by_id("kw").send_keys("Python") driver.find_element(By.ID, 'kw').send_keys("Python") sleep(2) # driver.find_element_by_id("kw").clear() driver.find_element(By.ID, "kw").clear() sleep(2) # driver.find_element_by_name("wd").send_keys("Selenium") driver.find_element(By.NAME, "wd").send_keys("Selenium") sleep(3) # driver.find_element_by_id("su").click() driver.find_element(By.ID, "su").click() # driver.find_element(By.CLASS_NAME, class_name).click() driver.find_element(By.ID, "su").click() # driver.find_element(By.CSS_SELECTOR, css_selector).click() # driver.find_element(By.XPATH, xpath_selector).click() # driver.find_element(By.LINK_TEXT, link_text).click() # driver.find_element(By.PARTIAL_LINK_TEXT, partial_link_text).click() sleep(3) driver.close()
def mouse_action(): """ common mouse action :return: """ url = r'https://www.baidu.com' driver = get_driver() driver.get(url) # maximize the windows driver.maximize_window() # get input element element = driver.find_element_by_css_selector('#kw') element.send_keys("Python") sleep(3) # double click the input ActionChains(driver).double_click(element).perform() sleep(2) ActionChains(driver).context_click(element).perform() # click ActionChains(driver).click(element).perform() element.click() setting = driver.find_element_by_css_selector('.pf') ActionChains(driver).move_to_element(setting).perform() sleep(3) ActionChains(driver).reset_actions() sleep(4) driver.close()
def save_screen_shot(): """ :return: """ picture_directory = r'F:\Testing_Development\UnittestProjects\automated_testing\automated_testing\webdriver_api_practice\screen_shot' url = "https://www.runoob.com/python/python-tutorial.html" driver = get_driver() driver.get(url) time.sleep(3) try: if not os.path.exists(picture_directory): os.makedirs(picture_directory) print("make directory successfully") else: print("directory exists") except BaseException as e: print(e) # stringify the local time stamp time_now = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime(time.time())) try: # method 2 picture_status = driver.save_screenshot(picture_directory + '\\' + time_now + '.png') print(picture_status) except BaseException as e: print(e) time.sleep(2) driver.close() pass
def locate_partial_link_text(): """ locate element by link text :return: """ url = "https://www.51zxw.net/" driver = get_driver() driver.get(url) driver.find_element_by_partial_link_text("室内").click() sleep(3) driver.close()
def basic_operation(): """ open、quit :return: """ url = r'https://www.51zxw.net/Show.aspx?cid=615&id=60545' driver = get_driver() driver.get(url) sleep(3) print("current website title is:{}".format(driver.title)) print("current website url is:{}".format(driver.current_url)) driver.close()
def locate_tag_name(): """ locate element by tag name :return: """ url = r"https://www.51zxw.net/login" driver = get_driver() driver.get(url) driver.find_element_by_id("loginStr").send_keys("george") driver.find_element_by_name("pwd").send_keys("123456") driver.find_elements_by_tag_name("button")[0].click() sleep(3) driver.close()
def locate_class_name(): """ locate element by class name :return: """ url = r'https://www.baidu.com/' driver = get_driver() driver.get(url) driver.find_element_by_class_name("s_ipt").send_keys("Python") sleep(3) driver.find_element_by_id("su").click() sleep(3) driver.close()
def explicit_wait_demo(): """ explicit wait demo :return: """ url = r'https://www.baidu.com' driver = get_driver() driver.get(url) driver.find_element_by_css_selector("#kw").send_keys("Python") element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'su'))) element.click() sleep(3) driver.close()
def locate_xpath(): """ locate by xpath :return: """ url = r'https://www.baidu.com/' driver = get_driver() driver.get(url) # driver.find_element_by_xpath("//input[@id='kw']").send_keys("Python") driver.find_element_by_xpath("//input[@class='s_ipt']").send_keys("Python") sleep(3) # driver.find_element_by_xpath("//input[@id='su']").click() driver.find_element_by_xpath("//input[@value='百度一下']").click() sleep(3) driver.close()
def upload_file_demo(): """ :return: """ image_path = r'F:\Personal_Folder\Imagies\jiesi.png' url = r'https://www.baidu.com' driver = get_driver() driver.get(url) # locate upload button driver.find_element_by_xpath("//span[@class='soutu-btn']").click() sleep(2) driver.find_element_by_css_selector(".upload-pic").send_keys(image_path) sleep(10) driver.close()
def locate_xpath_relative(): """ locate xpath :return: """ url = r'https://www.51zxw.net/' driver = get_driver() driver.get(url) # driver.find_element_by_xpath("//div[@id='courseTypes']//div[2]/a[.='Windows']").click() driver.find_element_by_xpath( "//div[@id='courseTypes']/div/div/div[2]/a[.='Windows']").click() # logical combination positioning # driver.find_element_by_xpath("//div[@id='kw']"/input[@id='name' and @value='hello']).click() sleep(3) driver.close()
def locate_id_name(): """ locate by id or name :return: """ url = r'https://www.baidu.com' driver = get_driver() driver.get(url) driver.find_element_by_id("kw").send_keys("Python") sleep(2) driver.find_element_by_id("kw").clear() sleep(2) driver.find_element_by_name("wd").send_keys("Selenium") sleep(3) driver.find_element_by_id("su").click() sleep(3) driver.close()
def locate_select(): """ locate select :return: """ url = r'https://www.51zxw.net/' driver = get_driver() driver.get(url) # method 1use value driver.find_element_by_css_selector("[value='2']").click() # method2 use option driver.find_elements_by_tag_name('option')[1].click() # method 3 select = Select(driver.find_element_by_css_selector("[name='cookieDate']")) select.select_by_index(1) select.select_by_value('2') select.select_by_visible_text("留两天")
def login_action(url): """ url: :return: driver with cookie data and path information """ driver = get_driver() driver.get(url) username = str(input("Please enter your username:"******"Please enter your password:"******"#user_login").send_keys(username) sleep(2) driver.find_element_by_css_selector("#user_password").send_keys(password) sleep(2) driver.find_element_by_xpath( "//div[@class='git-login-form-fields']//input[@name='commit']").click( ) sleep(3) element = WebDriverWait(driver, 10, 0.5).until( EC.presence_of_element_located( (By.XPATH, "//strong[@class='ml-1']//a[contains(text(),'thechorus')]"))) cookies = driver.get_cookies() print(type(cookies)) # define cookie directory cookie_directory = r'F:\Testing_Development\UnittestProjects\automated_testing\automated_testing\webdriver_api_practice\cookie_data' try: if not os.path.exists(cookie_directory): os.makedirs(cookie_directory) print("make directory successfully") else: print("directory exists") except BaseException as e: print(e) with open(cookie_directory + '\\' + "gitee.json", 'w') as f: # change the json object to json object and write to file json.dump(cookies, f) element.click() sleep(3) # driver.close() return driver
def multi_windows_switch(): """ :return: """ url = r'https://www.51zxw.net/List.aspx?cid=615#!fenye=4' driver = get_driver() driver.get(url) # get current page handle handle_current = driver.current_window_handle driver.find_element_by_partial_link_text("4-27 文件").click() sleep(3) # switch to before page by handle driver.switch_to.window(handle_current) sleep(3) driver.find_element_by_xpath("//a[contains(text(),'4-25')]").click() sleep(2) driver.close()
def scroll_bar_controller(): """ use js to handle the scroll bar :return: """ driver = get_driver() url = r'https://www.51zxw.net/' driver.get(url) sleep(2) # to drag the scroll bar to bottle js = "var action=document.documentElement.scrollTop=10000" driver.execute_script(js) sleep(3) js = "var action=document.documentElement.scrollTop=0" driver.execute_script(js) sleep(2) driver.close()
def frame_nested_demo(): """ :return: """ # url = r"http://localhost:63342/automated_testing/automated_testing/webdriver_api_practice/frame_demo.html?_ijt=uqnkn02h3irc5mljmqut1s5k38" url = r'F:\Testing_Development\UnittestProjects\automated_testing\automated_testing\webdriver_api_practice\frame_demo.html' driver = get_driver() driver.get(url) # use iframe id to switch # driver.switch_to_frame("search") driver.switch_to.frame("search") # operation in iframe driver.find_element_by_css_selector("#query").send_keys("Python") sleep(2) driver.find_element_by_css_selector("#stb") sleep(3) driver.close()
def implicit_wait_demo(): """ implicit wait wait for all the web page :return: """ url = r"https://www.baidu.com" driver = get_driver() driver.get(url) # set driver wait 5 seconds for all the page elements driver.implicitly_wait(5) try: driver.find_element_by_css_selector("#kw").send_keys("Python") driver.find_element_by_css_selector("#su").click() except NoSuchElementException as e: print(e) finally: print("Process finished!") sleep(3) print(driver.title) driver.close()
def locate_css(): """ locate css :return: """ url = r"https://www.baidu.com" driver = get_driver() driver.get(url) # locate by id driver.find_element_by_css_selector("#kw").send_keys("Python") sleep(3) # locate by class driver.find_element_by_css_selector(".s_ipt").send_keys("Hello") sleep(2) # locate by property driver.find_element_by_css_selector("#su").click() # css locator use > to differentiate hierarchy to property behind node like form#loginForm driver.find_element_by_css_selector("form#loginForm>ul>input").send_keys( "Hello") sleep(3) driver.close()
def cookie_handler(): """ :return: """ driver = get_driver() url = r"https://www.51zxw.net/Show.aspx?cid=615&id=60850" driver.get(url) cookie = driver.get_cookies() sleep(3) print(cookie) cookie_directory = r'F:\Testing_Development\UnittestProjects\automated_testing\automated_testing\webdriver_api_practice\cookie_data' with open(cookie_directory + '\\' + ".51zxw_json.json", 'w') as f: # change the json object to json object and write to file json.dump(cookie, f) # f.write(json.dumps(cookie)) print(type(cookie)) for item in cookie: print("name is {} and value is {}".format(item['name'], item['value'])) sleep(3) # add cookie driver.add_cookie({'name': '51zxw', 'value': 'www.51zxw.com'}) driver.get(url) driver.close()
def pop_up_windows_handle(): """ :return: """ url = r'https://www.baidu.com' driver = get_driver() driver.get(url) driver.find_element_by_link_text("设置").click() # todo : why this lose efficacy with name location # driver.find_element_by_name("tj_settingicon").click() sleep(2) # thought we can't find this element in web page content but we can still operate it with location driver.find_element_by_link_text("搜索设置").click() sleep(2) driver.find_element_by_link_text("保存设置").click() sleep(2) # initialize a alert object alert = driver.switch_to.alert alert.accept() sleep(3) driver.close()
def keyboard_action(): """ common keyboard action :return: """ url =r"https://www.baidu.com" driver = get_driver() driver.get(url) driver.find_element_by_css_selector("#kw").send_keys("Python") print(driver.title) sleep(2) # simulate keyboard action CTRL + A driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'a') driver.find_element_by_css_selector("#kw").send_keys(Keys.CONTROL, 'c') url = r'https://www.sogou.com/' driver.get(url) driver.find_element_by_css_selector(".sec-input").send_keys(Keys.CONTROL, 'v') sleep(3) driver.find_element_by_css_selector("#stb").click() print(driver.title) sleep(3) driver.close()
def setUp(self): self.driver = get_driver() url = r'https://www.baidu.com' self.driver.implicitly_wait(5) self.driver.get(url)
self.driver.find_element_by_css_selector("#login_field").send_keys(username) sleep(2) self.driver.find_element_by_css_selector("#password").clear() self.driver.find_element_by_css_selector("#password").send_keys(password) self.driver.find_element_by_xpath("//input[@name='commit']").click() # explicit wait element = WebDriverWait(self.driver, 20, 0.5).until( EC.presence_of_element_located((By.XPATH, "//a[contains(text(),'Pull requests')]"))) if element: print("Login successfully") def user_logout(self): # logout action # driver.find_element_by_xpath("//div[@class='Header-item position-relative mr-0']//span[@class='dropdown-caret']]").click() # todo: to locate the summary the xpath path is incorrect self.driver.find_element_by_xpath("//header[@class='Header']/div[5]/details/summary[1]").click() self.driver.find_element_by_xpath("//form[@class='logout-form']/button").click() # driver.find_element_by_xpath("//button[@class='dropdown-item dropdown-signout']").click() sleep(3) self.driver.close() if __name__ == "__main__": url = r'https://github.com/login' driver = get_driver() # login and logout share the same driver login_handler = Login(driver, url) login_handler.user_login() login_handler.user_logout()
def add_cookie(driver, url): """ get cookie data from driver with cookies :param url: :param driver: if not with this driver domain would be make no sense :return: """ driver = get_driver() driver.get(url) json_path = r'F:\Testing_Development\UnittestProjects\automated_testing\automated_testing\webdriver_api_practice\cookie_data\gitee.json' with open(json_path, 'r') as f: cookie_data = json.load(f) # print(type(cookie_data)) # print(cookie_data) for item in cookie_data: driver.add_cookie({ 'domain': item['domain'], 'httpOnly': item['httpOnly'], 'name': item['name'], 'path': item['path'], 'secure': item['secure'], 'value': item['value'] }) driver.get(url) # without account and password we can login the website but we need to know we need the same driver driver.refresh() try: element = WebDriverWait(driver, 10, 0.5).until( EC.presence_of_element_located( (By.XPATH, "//strong[@class='ml-1']//a[contains(text(),'thechorus')]"))) if element: print("Login success with account!") else: print("Login failed!") except BaseException as e: print(e) # screen shot picture_directory = r'F:\Testing_Development\UnittestProjects\automated_testing\automated_testing\webdriver_api_practice\screen_shot' try: if not os.path.exists(picture_directory): os.makedirs(picture_directory) print("make directory successfully") else: print("directory exists") except BaseException as e: print(e) # stringify the local time stamp time_now = time.strftime("%Y-%m-%d_%H_%M_%S", time.localtime(time.time())) try: # method 1 picture_status = driver.get_screenshot_as_file(picture_directory + '\\' + time_now + '.png') if picture_status: print("screen shot successfully!") except BaseException as e: print(e) driver.close()