How to use locator method in Playwright Python

Best Python code snippet using playwright-python

PageAction.py

Source:PageAction.py Github

copy

Full Screen

1# encoding=utf-82# @time :2020/5/9 12:183# @Author :liulaing.song4# @Email :1056703204@qq.com5# @File :PageAction.py6# @explain:页面动作78from selenium import webdriver9import time10from selenium.webdriver.common.action_chains import ActionChains11from selenium.webdriver.support.ui import WebDriverWait12from selenium.webdriver.common.by import By13from selenium.webdriver.support import expected_conditions as EC14from util.Log import Log15from util.KeyBoardUtil import KeyboardKeys16from util.WebTable import Table17from util.ReplaceValue import ReplaceValue18from selenium.webdriver.common.keys import Keys1920# 定义全局变量21driver = None222324class PageAction(object):2526 def __init__(self):27 self.log = Log()28 self.key = KeyboardKeys()29 self.rv = ReplaceValue()3031 def openBrowser(self, url):32 '''3334 :param url: 输入的地址35 :return: 打开浏览器36 '''37 global driver38 try:39 # option = webdriver.ChromeOptions()40 # option.add_argument('--headless')41 # driver = webdriver.Chrome(chrome_options=option)42 driver = webdriver.Chrome()43 driver.maximize_window()44 except Exception as e:45 raise e46 try:47 driver.get(url)48 driver.implicitly_wait(10)49 except Exception as e:50 raise e5152 def pageMotion(self, motion=None, locatorExpression=None, hoverLocator=None, value=None, table=None):53 '''5455 :param motion: 动作指令56 :param locatorExpression: 操作元素定位表达式57 :param hoverLocator:悬浮点击位置定位表达式58 :param value:59 :return:60 '''61 global driver62 if motion == "click":6364 locator = (By.XPATH, locatorExpression)65 try:66 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))67 except:68 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')69 try:70 # 点击事件71 driver.find_element_by_xpath(locatorExpression).click()72 time.sleep(4)73 except:74 # print("未找到" + locatorExpression + "点击事件的元素")75 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')7677 elif motion == "click_bottom":78 locator = (By.XPATH, locatorExpression)79 try:80 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))81 except:82 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')83 try:84 # 点击事件85 js = "var q=getElementByXPath(//div[@class='slider-bar']).scrollTop=0"86 driver.execute_script(js)87 time.sleep(2)88 driver.find_element_by_xpath(locatorExpression).click()89 time.sleep(4)90 except:91 # print("未找到" + locatorExpression + "点击事件的元素")92 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')93949596 elif motion == "click_top":97 locator = (By.XPATH, locatorExpression)98 try:99 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))100 except:101 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')102103 try:104 # 点击事件105 js = "var q=getElementByXPath('//div[@class='slider-bar']').scrollTop=100000"106 driver.execute_script(js)107 time.sleep(2)108 driver.find_element_by_xpath(locatorExpression).click()109 time.sleep(4)110 except:111 # print("未找到" + locatorExpression + "点击事件的元素")112 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')113114 elif motion == "input":115116 locator = (By.XPATH, locatorExpression)117 try:118 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))119 except:120 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')121122 try:123 # 清除输入框124 driver.find_element_by_xpath(locatorExpression).clear()125 # 输入值126 driver.find_element_by_xpath(locatorExpression).send_keys(value)127 time.sleep(2)128 except:129 # print("未找到" + locatorExpression + "输入事件的元素")130 self.log.info('未找到"' + locatorExpression + '"输入事件的定位元素')131132 elif motion == "double_click":133134 locator = (By.XPATH, locatorExpression)135 try:136 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))137 except:138 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')139140 try:141 double = driver.find_element_by_xpath(locatorExpression)142 ActionChains(driver).double_click(double).perform()143 time.sleep(4)144 except:145 # print("未找到" + locatorExpression + "双击事件的元素")146 self.log.info('未找到' + locatorExpression + '双击事件的定位元素')147148149 elif motion == "double_click_esc":150151 locator = (By.XPATH, locatorExpression)152 try:153 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))154 except:155 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')156 try:157 double = driver.find_element_by_xpath(locatorExpression)158 ActionChains(driver).double_click(double).perform()159 time.sleep(4)160 ActionChains(driver).send_keys(Keys.ESCAPE).perform()161 time.sleep(2)162 except:163 # print("未找到" + locatorExpression + "双击事件的元素")164 self.log.info('未找到' + locatorExpression + '双击事件的定位元素')165166 elif motion == "hover":167168 locator = (By.XPATH, locatorExpression)169 try:170 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))171 except:172 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')173174 try:175 ydong = driver.find_element_by_xpath(locatorExpression)176 ActionChains(driver).move_to_element(ydong).perform()177 time.sleep(2)178 except:179 self.log.info('未找到"' + locatorExpression + '"鼠标悬浮事件的定位元素')180181 # try:182 # driver.find_element_by_xpath(hoverLocator).click()183 # time.sleep(3)184 # except:185 # self.log.info('未找到"' + hoverLocator + '"鼠标悬浮后点击事件的定位元素')186187 # elif motion == "enter":188 # try:189 # self.key.oneKey("enter")190 # time.sleep(8)191 # except Exception as e:192 # self.log.info("模拟enter报错: %s" %e)193194 elif motion == "enter":195196 locator = (By.XPATH, locatorExpression)197 try:198 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))199 except:200 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')201202 try:203 driver.find_element_by_xpath(locatorExpression).send_keys(Keys.ENTER)204 time.sleep(5)205 except:206 self.log.info('未找到"' + locatorExpression + '"回车键事件的定位元素')207208 elif motion == "esc":209 try:210 self.key.oneKey("esc")211 time.sleep(2)212 except Exception as e:213 self.log.info("模拟esc报错: %s" % e)214215 elif motion == "top":216 try:217 js = "var q=document.getElementById('main-scroll').scrollTop = 0"218 driver.execute_script(js)219 time.sleep(2)220 except Exception as e:221 self.log.info("页面置顶报错: %s" % e)222223 # try:224 # driver.find_element_by_xpath(locatorExpression).click()225 # time.sleep(3)226 # except:227 # self.log.info('未找到"' + locatorExpression + '"置顶后点击事件的定位元素')228 elif motion == "click_esc":229230 locator = (By.XPATH, locatorExpression)231 try:232 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))233 except:234 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')235236 try:237 # 点击事件238 driver.find_element_by_xpath(locatorExpression).click()239 time.sleep(9)240 ActionChains(driver).send_keys(Keys.ESCAPE).perform()241 time.sleep(2)242 except:243 # print("未找到" + locatorExpression + "点击事件的元素")244 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')245246 # try:247 # self.key.oneKey("esc")248 # time.sleep(2)249 # except Exception as e:250 # self.log.info("模拟esc报错: %s" %e)251252 elif motion == "quit":253254 try:255 driver.quit()256 except Exception as e:257 self.log.info("退出浏览器失败: %s" % e)258259 elif motion == "text":260261 locator = (By.XPATH, locatorExpression)262 try:263 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))264 except:265 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')266267 try:268 text = driver.find_element_by_xpath(locatorExpression).text269 time.sleep(2)270 # print(text)271 return text272 except:273 self.log.info('未找到"' + locatorExpression + '"定位的元素文本信息')274 # driver.quit()275276 elif motion == "attribute":277278 locator = (By.XPATH, locatorExpression)279 try:280 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))281 except:282 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')283284 try:285 text = driver.find_element_by_xpath(locatorExpression).get_attribute('value')286 time.sleep(2)287 # print(text)288 return text289 except:290 self.log.info('未找到"' + locatorExpression + '"定位的元素文本信息')291292 elif motion == "table_cell":293294 locator = (By.XPATH, locatorExpression)295 try:296 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))297 except:298 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')299300 try:301 webTable = driver.find_element_by_xpath(locatorExpression)302 # listData = webTable.text303 tableMessage = Table(webTable)304 text = tableMessage.getCell(0, 5).text305 workNo = tableMessage.getCell(0, 4).text306 self.rv.keepValue(workNo)307 time.sleep(2)308 return text309 except:310 self.log.info('未找到"' + locatorExpression + '"定位的元素table表格信息')311312 elif motion == "click_role":313314 locator = (By.XPATH, locatorExpression)315 try:316 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))317 except:318 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')319320 try:321 # 点击事件322 driver.find_element_by_xpath(locatorExpression).click()323 time.sleep(5)324 except:325 # print("未找到" + locatorExpression + "点击事件的元素")326 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')327328 elif motion == "click_sleep":329330 locator = (By.XPATH, locatorExpression)331 try:332 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))333 except:334 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')335336 try:337 # 点击事件338 driver.find_element_by_xpath(locatorExpression).click()339 time.sleep(10)340 except:341 # print("未找到" + locatorExpression + "点击事件的元素")342 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')343344 elif motion == "click_await":345346 locator = (By.XPATH, locatorExpression)347 try:348 WebDriverWait(driver, 30).until(EC.presence_of_all_elements_located(locator))349 except:350 self.log.info('未找到"' + locatorExpression + '"点击事件的定位元素')351352 try:353 text = driver.find_element_by_xpath(locatorExpression).text354 if "等待汇总" not in text:355 while True:356 driver.refresh()357 time.sleep(10)358 text = driver.find_element_by_xpath(locatorExpression).text359 if "等待汇总" in text:360 locator = (By.XPATH, "//i[@class='icon ikcon ikcon-iconfont iconpick-up']")361 WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located(locator))362 driver.find_element_by_xpath("//i[@class='icon ikcon ikcon-iconfont iconpick-up']").click()363 time.sleep(3)364 locator = (By.XPATH, "//i[@class='icon ikcon ikcon-iconfont iconexpand']")365 WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located(locator))366 driver.find_element_by_xpath("//i[@class='icon ikcon ikcon-iconfont iconexpand']").click()367 time.sleep(3)368 break369 except:370 self.log.info('未找到"' + locatorExpression + '"定位的元素文本信息')371372373374375376 else:377 driver.quit()378 self.log.info("请检查excel'动作'列是否书写正确")379380381if __name__ == "__main__":382 pa = PageAction()383 pa.openBrowser("http://uat.tijian.ikang.com")384 pa.pageMotion(motion="input", locatorExpression="//input[@placeholder='请输入账号']", value="liuliangsong")385 pa.pageMotion(motion="input", locatorExpression="//input[@placeholder='请输入密码']", value="123456")386 pa.pageMotion(motion="click", locatorExpression="//button[@type='button']") ...

Full Screen

Full Screen

selenium_driver.py

Source:selenium_driver.py Github

copy

Full Screen

1from selenium.webdriver.common.by import By2from traceback import print_stack3from selenium.webdriver.support.select import Select4from selenium.webdriver.support.ui import WebDriverWait5from selenium.webdriver.support import expected_conditions as EC6from selenium.webdriver.common.action_chains import ActionChains7from selenium.common.exceptions import *8import utilities.custom_logger as cl9import logging10import time11import os12import allure13class SeleniumDriver():14 log = cl.customLogger(logging.DEBUG)15 def __init__(self, driver):16 self.driver = driver17 def screenShot(self, resultMessage):18 """19 Take a screenshot of the current open web page20 """21 fileName = resultMessage + "." + str(round(time.time() *1000)) + ".png"22 if len(fileName) >= 200:23 fileName = str(round(time.time() *1000)) + ".png"24 screenshotDirectory = "../screenshots/"25 relativeFileName = screenshotDirectory + fileName26 currentDirectory = os.path.dirname(__file__)27 destinationFile = os.path.join(currentDirectory, relativeFileName)28 destinationDirectory = os.path.join(currentDirectory, screenshotDirectory)29 try:30 if not os.path.exists(destinationDirectory):31 os.makedirs(destinationDirectory)32 self.driver.save_screenshot(destinationFile)33 allure.attach(self.driver.get_screenshot_as_png(),34 name=fileName,35 attachment_type=allure.attachment_type.PNG)36 self.log.info("Screenshot save to directory: " + destinationFile)37 except:38 self.log.error("### Exception Occurred when taking screenshot")39 print_stack()40 def getTitle(self):41 return self.driver.title42 def getByType(self, locatorType):43 locatorType = locatorType.lower()44 if locatorType == "id":45 return By.ID46 elif locatorType == "name":47 return By.NAME48 elif locatorType == "xpath":49 return By.XPATH50 elif locatorType == "css":51 return By.CSS_SELECTOR52 elif locatorType == "class":53 return By.CLASS_NAME54 elif locatorType == "link":55 return By.LINK_TEXT56 else:57 self.log.info("Locator type" + locatorType + "not correct/supported")58 return False59 def dropdownSelectElement(self, locator, locatorType="id", selector="", selectorType="value"):60 try:61 element = self.getElement(locator, locatorType)62 sel = Select(element)63 if selectorType == "value":64 sel.select_by_value(selector)65 time.sleep(1)66 elif selectorType == "index":67 sel.select_by_index(selector)68 time.sleep(1)69 elif selectorType == "text":70 sel.select_by_visible_text(selector)71 time.sleep(1)72 self.log.info("Element selected with selector: " + str(selector) +73 " and selectorType: " + selectorType)74 except:75 self.log.error("Element not selected with selector: " + str(selector) +76 " and selectorType: " + selectorType)77 print_stack()78 def getDropdownOptionsCount(self, locator, locatorType="id"):79 '''80 get the number of options of drop down list81 :return: number of Options of drop down list82 '''83 options = None84 try:85 element = self.getElement(locator, locatorType)86 sel = Select(element)87 options = sel.options88 self.log.info("Element found with locator: " + locator +89 " and locatorType: " + locatorType)90 except:91 self.log.error("Element not found with locator: " + locator +92 " and locatorType: " + locatorType)93 return options94 def getDropdownSelectedOptionText(self, locator, locatorType="id"):95 '''96 get the text of selected option in drop down list97 :return: the text of selected option in drop down list98 '''99 selectedOption_text = None100 try:101 element = self.getElement(locator, locatorType)102 sel = Select(element)103 selectedOption_text = sel.first_selected_option.text104 self.log.info("Return the selected option of drop down list with locator: " + locator +105 " and locatorType: " + locatorType)106 except:107 self.log.error("Can not return the selected option of drop down list with locator: " + locator +108 " and locatorType: " + locatorType)109 return selectedOption_text110 def getDropdownSelectedOptionValue(self, locator, locatorType="id"):111 '''112 get the value of selected option in drop down list113 :return: the value of selected option in drop down list114 '''115 selectedOption_value = None116 try:117 element = self.getElement(locator, locatorType)118 sel = Select(element)119 selectedOption_value = sel.first_selected_option.get_attribute("value")120 self.log.info("Return the selected option of drop down list with locator: " + locator +121 " and locatorType: " + locatorType)122 except:123 self.log.error("Can not return the selected option of drop down list with locator: " + locator +124 " and locatorType: " + locatorType)125 return selectedOption_value126 def getElement(self, locator, locatorType="id"):127 element = None128 try:129 locatorType = locatorType.lower()130 byType = self.getByType(locatorType)131 element = self.driver.find_element(byType, locator)132 self.log.info("Element found with locator: " + locator +133 " and locatorType: " + locatorType)134 except:135 self.log.error("Element not found with locator: " + locator +136 " and locatorType: " + locatorType)137 return element138 def isElementSelected(self, locator, locatorType):139 isSelected = None140 try:141 element = self.getElement(locator, locatorType)142 isSelected = element.is_selected()143 self.log.info("Element found with locator: " + locator +144 " and locatorType: " + locatorType)145 except:146 self.log.error("Element not found with locator: " + locator +147 " and locatorType: " + locatorType)148 return isSelected149 def getElementList(self, locator, locatorType="id"):150 """151 Get list of elements152 """153 element = None154 try:155 locatorType = locatorType.lower()156 byType = self.getByType(locatorType)157 element = self.driver.find_elements(byType, locator)158 self.log.info("Element list found with locator: " + locator +159 " and locatorType: " + locatorType)160 except:161 self.log.error("Element list not found with locator: " + locator +162 " and locatorType: " + locatorType)163 return element164 def elementClick(self, locator="", locatorType="id", element=None):165 """166 Either provide element or a combination of locator and locatorType167 """168 try:169 if locator:170 element = self.getElement(locator, locatorType)171 element.click()172 self.log.info("clicked on element with locator: " + locator +173 " locatorType: " + locatorType)174 except:175 self.log.error("cannot click on the element with locator: " + locator +176 " locatorType: " + locatorType)177 print_stack()178 def elementHover(self, locator="", locatorType="id", element=None):179 """180 Either provide element or a combination of locator and locatorType181 """182 try:183 if locator:184 element = self.getElement(locator, locatorType)185 hover = ActionChains(self.driver).move_to_element(element)186 hover.perform()187 time.sleep(2)188 self.log.info("hover to element with locator: " + locator +189 " locatorType: " + locatorType)190 except:191 self.log.error("cannot hover to the element with locator: " + locator +192 " locatorType: " + locatorType)193 print_stack()194 def sendKeys(self, data, locator="", locatorType="id", element=None):195 """196 Send keys to an element197 Either provide element or a combination of locator and locatorType198 """199 try:200 if locator:201 element = self.getElement(locator, locatorType)202 element.send_keys(data)203 self.log.info("send data on element with locator: " + locator +204 " locatorType: " + locatorType)205 except:206 self.log.error("cannot send data on the element with locator: " + locator +207 " locatorType: " + locatorType)208 print_stack()209 def clearKeys(self, locator="", locatorType="id", element=None):210 """211 Clear keys of an element212 Either provide element or a combination of locator and locatorType213 """214 try:215 if locator:216 element = self.getElement(locator, locatorType)217 element.clear()218 self.log.info("Clear data of element with locator: " + locator +219 " locatorType: " + locatorType)220 except:221 self.log.error("cannot clear data of the element with locator: " + locator +222 " locatorType: " + locatorType)223 print_stack()224 def getText(self, locator="", locatorType="id", element=None, info=""):225 """226 Get 'Text' on an element227 Either provide element or a combination of locator and locatorType228 """229 try:230 if locator:231 self.log.debug("In locator condition")232 element = self.getElement(locator, locatorType)233 self.log.debug("Before finding text")234 text = element.text235 self.log.debug("After finding element, size is: " + str(len(text)))236 if len(text) == 0:237 text = element.get_attribute("innerText")238 if len(text) !=0:239 self.log.info("Getting text on element :: " + info)240 self.log.info("The text is :: '" + text + "'")241 text = text.strip()242 except:243 self.log.error("Failed to get text on element " + info)244 print_stack()245 text = None246 return text247 def isElementPresent(self, locator="", locatorType="id", element=None):248 """249 Check if element is present250 Either provide element or a combination of locator and locatorType251 """252 try:253 if locator:254 element = self.getElement(locator, locatorType)255 if element is not None:256 self.log.info("Element found with locator: " + locator +257 " and locatorType: " + locatorType)258 return True259 else:260 self.log.error("Element not found with locator: " + locator +261 " and locatorType: " + locatorType)262 return False263 except:264 self.log.error("Element not found with locator: " + locator +265 " and locatorType: " + locatorType)266 return False267 def isElementDisplayed(self, locator="", locatorType="id", element=None):268 """269 Check if element is displayed270 Either provide element or a combination of locator and locatorType271 """272 isDisplayed = False273 try:274 if locator:275 element = self.getElement(locator, locatorType)276 if element is not None:277 isDisplayed = element.is_displayed()278 self.log.info("Element is displayed with locator: " + locator +279 " and locatorType: " + locatorType)280 else:281 self.log.error("Element is not displayed with locator: " + locator +282 " and locatorType: " + locatorType)283 return isDisplayed284 except:285 self.log.error("Element is not displayed with locator: " + locator +286 " and locatorType: " + locatorType)287 return False288 def elementPresenceCheck(self, locator="", locatorType="id"):289 try:290 locatorType = locatorType.lower()291 byType = self.getByType(locatorType)292 elementList = self.driver.find_elements(byType, locator)293 if len(elementList) > 0:294 self.log.info("Element Found")295 return True296 else:297 self.log.info("Element not found")298 return False299 except:300 self.log.info("Element not found")301 return False302 def waitForElement(self, locator, locatorType = 'id', timeout = 10, pollFrequency = 0.5 ):303 element = None304 try:305 self.log.info("Waiting for maximum :: " + str(timeout) + " :: seconds for element to be clickable")306 wait = WebDriverWait(self.driver, timeout, poll_frequency=pollFrequency,307 ignored_exceptions=[NoSuchElementException,308 ElementNotVisibleException,309 ElementNotSelectableException])310 ByType = self.getByType(locatorType)311 element = wait.until(EC.element_to_be_clickable((ByType,locator)))312 self.log.info("Element appeared on the web page")313 except:314 self.log.info("Element not appeared on the web page")315 print_stack()316 return element317 def webScroll(self, direction="up"):318 if direction == "up":319 # Scroll Up320 self.driver.execute_script("window.scrollBy(0, -1000);")321 if direction == "down":322 # Scroll Down323 self.driver.execute_script("window.scrollBy(0, 1000);")324 def getURL(self):325 '''326 Get the current URL327 :return: current URL328 '''329 currentURL = self.driver.current_url330 return currentURL331 def pageBack(self):332 '''333 page back the browser334 '''335 self.driver.execute_script("window.history.go(-1)")336 def getAttributeValue(self, locator="", locatorType="id", element=None, attribute=""):337 '''338 get attribute value339 '''340 try:341 if locator:342 self.log.debug("In locator condition")343 element = self.getElement(locator, locatorType)344 attribute_value = element.get_attribute(attribute)345 except:346 self.log.error("Failed to get " + attribute + " in element with locator: " +347 locator + " and locatorType: " + locatorType)348 print_stack()349 attribute_value = None350 return attribute_value351 def refresh(self):352 self.driver.get(self.driver.current_url)353 def page_has_loaded(self):354 try:355 WebDriverWait(self.driver, 1000, poll_frequency=0.5).until(lambda driver: self.driver.execute_script('return document.readyState == "complete";'))356 WebDriverWait(self.driver, 1000, poll_frequency=0.5).until(lambda driver: self.driver.execute_script('return jQuery.active == 0'))357 WebDriverWait(self.driver, 1000, poll_frequency=0.5).until(lambda driver: self.driver.execute_script('return typeof jQuery != "undefined"'))358 WebDriverWait(self.driver, 1000, poll_frequency=0.5).until(lambda driver: self.driver.execute_script('return angular.element(document).injector().get("$http").pendingRequests.length === 0'))359 except:...

Full Screen

Full Screen

plot_cxctime_custom.py

Source:plot_cxctime_custom.py Github

copy

Full Screen

...64 :rtype: tuple with selected ticklocs as first element65 """66 locs = ticklocs or TICKLOCS67 for majorLoc, major_kwargs, major_fmt, minorLoc, minor_kwargs in locs:68 plt.xaxis.set_major_locator(majorLoc(**major_kwargs))69 plt.xaxis.set_minor_locator(minorLoc(**minor_kwargs))70 plt.xaxis.set_major_formatter(DateFormatter(major_fmt))71 majorticklocs = plt.xaxis.get_ticklocs()72 if len(majorticklocs) >= 5:73 break74 return ((majorLoc, major_kwargs, major_fmt, minorLoc, minor_kwargs), )75def remake_ticks(ax):76 """Remake the date ticks for the current plot if space is pressed. If '0'77 is pressed then set the date ticks to the maximum possible range.78 """79 ticklocs = set_time_ticks(ax)80 ax.figure.canvas.draw()81 82def plot_cxctime(times, y, fmt='-b', fig=None, ax=None, yerr=None, xerr=None, tz=None,83 state_codes=None, interactive=True, **kwargs):84 """Make a date plot where the X-axis values are in CXC time. If no ``fig``85 value is supplied then the current figure will be used (and created86 automatically if needed). If yerr or xerr is supplied, ``errorbar()`` will be87 called and any additional keyword arguments will be passed to it. Otherwise88 any additional keyword arguments (e.g. ``fmt='b-'``) are passed through to89 the ``plot()`` function. Also see ``errorbar()`` for an explanation of the possible90 forms of *yerr*/*xerr*.91 If the ``state_codes`` keyword argument is provided then the y-axis ticks and92 tick labels will be set accordingly. The ``state_codes`` value must be a list93 of (raw_count, state_code) tuples, and is normally set to ``msid.state_codes``94 for an MSID object from fetch().95 If the ``interactive`` keyword is True (default) then the plot will be redrawn96 at the end and a GUI callback will be created which allows for on-the-fly97 update of the date tick labels when panning and zooming interactively. Set98 this to False to improve the speed when making several plots. This will likely99 require issuing a plt.draw() or fig.canvas.draw() command at the end.100 :param times: CXC time values for x-axis (date)101 :param y: y values102 :param fmt: plot format (default = '-b')103 :param fig: pyplot figure object (optional)104 :param yerr: error on y values, may be [ scalar | N, Nx1, or 2xN array-like ] 105 :param xerr: error on x values in units of DAYS (may be [ scalar | N, Nx1, or 2xN array-like ] )106 :param tz: timezone string107 :param state_codes: list of (raw_count, state_code) tuples108 :param interactive: use plot interactively (default=True, faster if False)109 :param **kwargs: keyword args passed through to ``plot_date()`` or ``errorbar()``110 :rtype: ticklocs, fig, ax = tick locations, figure, and axes object.111 """112 if fig is None:113 fig = pyplot.gcf()114 if ax is None:115 ax = fig.gca()116 if yerr is not None or xerr is not None:117 ax.errorbar(cxctime2plotdate(times), y, yerr=yerr, xerr=xerr, fmt=fmt, **kwargs)118 ax.xaxis_date(tz)119 else:120 ax.plot_date(cxctime2plotdate(np.repeat(times, 2)[1:]), np.repeat(y, 2)[:-1], fmt=fmt, **kwargs)121 ticklocs = set_time_ticks(ax)122 fig.autofmt_xdate()123 if state_codes is not None:124 counts, codes = list(zip(*state_codes))125 ax.yaxis.set_major_locator(FixedLocator(counts))126 ax.yaxis.set_major_formatter(FixedFormatter(codes))127 # If plotting interactively then show the figure and enable interactive resizing128 if interactive and hasattr(fig, 'show'):129 fig.canvas.draw()130 ax.callbacks.connect('xlim_changed', remake_ticks)131 return ticklocs, fig, ax132def cxctime2plotdate(times):133 """134 Convert input CXC time (sec) to the time base required for the matplotlib135 plot_date function (days since start of year 1).136 137 :param times: iterable list of times138 :rtype: plot_date times139 """...

Full Screen

Full Screen

locators_manager.py

Source:locators_manager.py Github

copy

Full Screen

...54 locators_dict - Dictionary of Locators to be added where each key is the Locator name55 and each value is the corresponding Locator instance56 """57 for x in locators_dict:58 self.add_locator(x, locators_dict[x])59 def add_locator(self, name, locator, locator_type=None):60 """61 Add a single Locator to the list of instances. If not already a Locator instance, 62 it will be instantiated as one.63 @params64 name - name of the Locator65 locator - one of: Locator instance to be added,66 tuple containing (value, locator type)67 String locator value68 locator_type - String type of locator that is being added, as enumerated 69 in selenium.webdriver.common.by:By. one of:70 CSS_SELECTOR (default)71 CLASS_NAME72 ID73 NAME74 LINK_TEXT75 XPATH76 TAG_NAME77 PARTIAL_LINK_TEXT78 """79 if name in self.locators.keys():80 raise Exception('There is an existing locator with the name: %s' % name)81 if isinstance(locator, Locator):82 self.locators[name] = locator83 else:84 if locator_type is None:85 if isinstance(locator, tuple):86 locator_type = locator[0]87 locator = locator[1]88 else:89 locator_type = 'CSS_SELECTOR'90 if not hasattr(By, locator_type):91 raise Exception('Unrecognized locator type: %s' % locator_type)92 self.locators[name] = Locator(self.driver, name, locator, locator_type)93 def find_one(self, locator):94 """95 Find exactly one instance identified by this locator. If multiple elements are found, returns the96 first in the list.97 @params98 locator - one of: String Locator instance name99 String locator definition (using By.CSS_SELECTOR)100 tuple locator containing (value, locator type)101 @returns102 webelement identified by this locator.103 """104 results = self.find(locator)105 if len(results) == 0:106 raise Exception('Locator `%s` not found' % locator)107 return results[0]108 def find(self, locator):109 """110 Find all instances that are identified by this locator111 @params 112 locator - one of: String Locator instance name113 String locator definition (using By.CSS_SELECTOR)114 tuple locator containing (value, locator type)115 @returns116 webelement or list of webelements117 """118 if type(locator) == str:119 # a string definition key was passed in120 if locator in self.locators.keys():121 # we have a definition for this locator key122 #return self.driver.find_elements(getattr(By, self.locators[locator].by), self.locators[locator].locator)123 return self.locators[locator].find()124 else:125 # default to By.CSS_SELECTOR if we don't recognize it126 return self.find(('CSS_SELECTOR', locator))127 else:128 # a tuple definition was passed in129 return self.driver.find_elements(getattr(By, obj[0]), obj[1])130 def find_child(self, webelement, locator):131 """132 Find exactly one instance that is a child of the given webelement, identified by this locator. 133 If multiple elements are found, returns the first in the list.134 @params135 locator - one of: String Locator instance name136 String locator definition (using By.CSS_SELECTOR)137 tuple locator containing (value, locator type)138 @returns139 webelement identified by this locator.140 """141 results = self.find_children(webelement, locator)142 if len(results) == 0:143 raise Exception('Locator `%s` not found' % locator)144 return results[0]145 def find_children(self, webelement, locator):146 """147 Find all instances that are children of a given webelement, identified by this locator.148 @params 149 locator - one of: String Locator instance name150 String locator definition (using By.CSS_SELECTOR)151 tuple locator containing (value, locator type)152 @returns153 webelement or list of webelements154 """155 if type(locator) == str:156 # a string definition key was passed in157 if locator in self.locators.keys():158 # we have a definition for this locator key159 return webelement.find_elements(getattr(By, self.locators[locator].by), self.locators[locator].locator)160 else:161 # default to By.CSS_SELECTOR if we don't recognize it162 return self.find_children(webelement, ('CSS_SELECTOR', locator))163 else:164 # a tuple definition was passed in165 return webelement.find_elements(getattr(By, obj[0]), obj[1])166 def get_locator(self, name):167 """168 Return the raw locator value of a given Locator name169 @params170 name - name of the Locator instance171 @returns172 String value of the locator, regardless of locator type.173 """...

Full Screen

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Python automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful