def Refresh(cls, times=4): log.step_normal(u"Element [%s]: Browser Refresh" % (cls.__name__,)) for i in range(times): action = webdriver.ActionChains(env.threadlocal.BROWSER) action.key_down(Keys.CONTROL).send_keys(Keys.F5).key_up(Keys.CONTROL).perform() time.sleep(5)
def VerifyEnabled(cls, trueOrfalse): log.step_normal(u"Element [%s]: Verify Enabled = [%s]" % (cls.__name__, trueOrfalse)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) is_disabled = elements[cls.index].get_attribute("disabled") log.step_normal(u"Element [%s]: attribute 'is_disabled' = [%s]" % (cls.__name__, is_disabled)) if is_disabled == "true": if trueOrfalse == False: log.step_pass("Pass...") else: log.step_fail("Fail...") elif elements[cls.index].is_enabled(): if trueOrfalse == True: log.step_pass("Pass") else: log.step_fail("Fail") else: log.step_fail("Not verified.") cls.__clearup()
def GetParentElement(cls): log.step_normal("Element [%s]: GetParentElement()" % (cls.__name__)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) return elements[cls.index].parent()
def AlertSendKeys(cls, value): log.step_normal("AlertSendKeys [%s]" % value) try: env.threadlocal.BROWSER.switch_to.alert.send_keys(value) env.threadlocal.BROWSER.switch_to.default_content() except: log.step_warning(str(sys.exc_info()))
def cell_by_colname(self, rowx, col_name): for colx in range(0, self.sheet.ncols): if self.data[0][colx] == col_name: log.step_normal("[%s][%s]=[%s]" % (colx, col_name, self.data[rowx][colx])) return self.data[rowx][colx] return "ERROR: NO DATA FETCHED!"
def cell_by_rowname(self, row_name, colx): for rowx in range(0, self.sheet.nrows): if self.data[rowx][0] == row_name: log.step_normal("[%s][%s]=[%s]" % (row_name, colx, self.data[rowx][colx])) return self.data[rowx][colx] return "ERROR: NO DATA FETCHED!"
def GetElementObj(cls): #### get real time obj counts, without waiting. log.step_normal("Element [%s]: GetElementObj." % (cls.__name__)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) cls.__clearup() return elements[cls.index]
def SwitchToDefaultContent(cls): log.step_normal("SwitchToDefaultContent()") try: # env.threadlocal.BROWSER.switch_to_default_content() env.threadlocal.BROWSER.switch_to.default_content() except: log.step_warning("env.threadlocal.BROWSER.switch_to.default_content()") pass
def AlertTextHave(cls, txt_value): log.step_normal("AlertTextHave [%s]" % txt_value) alert_text = env.threadlocal.BROWSER.switch_to_alert().text() if txt_value in alert_text: log.step_pass("pass") else: log.step_fail("fail") env.threadlocal.BROWSER.switch_to_default_content()
def GetInnerHTML(cls): log.step_normal(u"Element [%s]: GetInnerHTML()" % (cls.__name__, )) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) log.step_normal(u"Element [%s]: InnerHTML = [%s]" % (cls.__name__, elements[cls.index].get_attribute('innerHTML'))) cls.__clearup() return elements[cls.index].get_attribute('innerHTML')
def SwitchToDefaultWindow(cls): log.step_normal("SwitchToDefaultWindow()") log.step_normal("Switch To The Default Window of: %s" % str(env.threadlocal.BROWSER.window_handles)) try: env.threadlocal.BROWSER.switch_to.window(env.threadlocal.BROWSER.window_handles[0]) except: log.step_warning("env.threadlocal.BROWSER.switch_to.window(env.threadlocal.BROWSER.window_handles[0])") pass
def GetObjectsCount(cls): log.step_normal("Element [%s]: GetObjectsCount." % (cls.__name__)) cls.__wait_for_appearing() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) log.step_normal("Element [%s]: GetObjectsCount = [%s]" % (cls.__name__, len(elements))) cls.__clearup() return len(elements)
def VerifyAttribute(cls, name, value, method='equal'): ''' Example: NewClaim.Dates.ReminderDate.VerifyAttribute('ng-model', 'hello', method='equal') NewClaim.Dates.ReminderDate.VerifyAttribute('ng-model', 'hello', method='contain') NewClaim.Dates.ReminderDate.VerifyAttribute('ng-model', 'hello', method='in') NewClaim.Dates.ReminderDate.VerifyAttribute('ng-model', 'hello', method='not equal') Description for "method": equal => real value is 'hello' has => real value contains 'hello', e.g. 'hello world'. in => real value in 'hello', e.g. 'he' differ => real value not equal to 'hello', e.g. 'hehe' ''' log.step_normal("Element [%s]: VerifyAttribute [%s] <%s> [%s]." % (cls.__name__, name, method, value)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) realvalue = elements[cls.index].get_attribute(name) if method.lower() == 'equal': if value == realvalue: log.step_pass("real value=[%s]" % realvalue) else: log.step_fail("real value=[%s]" % realvalue) elif method.lower() == 'not equal': if not value == realvalue: log.step_pass("real value=[%s]" % realvalue) else: log.step_fail("real value=[%s]" % realvalue) elif method.lower() == 'contain': if value in realvalue: log.step_pass("real value=[%s]" % realvalue) else: log.step_fail("real value=[%s]" % realvalue) elif method.lower() == 'not contain': if not value in realvalue: log.step_pass("real value=[%s]" % realvalue) else: log.step_fail("real value=[%s]" % realvalue) elif method.lower() == 'in': if realvalue in value: log.step_pass("real value=[%s]" % realvalue) else: log.step_fail("real value=[%s]" % realvalue) else: log.step_fail("code error.") cls.__clearup()
def GetAttribute(cls, attr): log.step_normal(u"Element [%s]: GetAttribute [%s]." % (cls.__name__, attr)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) attr_value = elements[cls.index].get_attribute(attr) log.step_normal(u"Element [%s]: Attribute Value = [%s]." % (cls.__name__, attr_value)) cls.__clearup() return attr_value
def ReleaseClick(cls): log.step_normal("Element [%s]: ReleaseClick()" % (cls.__name__)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) action = webdriver.ActionChains(env.threadlocal.BROWSER) action.release(elements[cls.index]) action.perform() cls.__clearup()
def SendEnter(cls): log.step_normal(u"Element [%s]: SendEnter()" % (cls.__name__, )) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) action = webdriver.ActionChains(env.threadlocal.BROWSER) action.send_keys_to_element(elements[cls.index], Keys.ENTER) action.perform() cls.__clearup()
def IsVisible(cls): log.step_normal("Element [%s]: IsVisible?" % (cls.__name__)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) if elements[cls.index].is_displayed(): cls.__clearup() return True else: cls.__clearup() return False
def send_keys_to_dialog(title=r".*Upload.*", key_valus=r""): log.step_normal("send_keys_to_dialogue(%s, %s)" % (title, key_valus)) win_dialog = WindowFinder() win_dialog.find_window_wildcard(title) win_dialog.set_foreground() time.sleep(2) SendKeys.SendKeys(key_valus) SendKeys.SendKeys("{ENTER}")
def IsAttribute(cls, name, value, method="contain"): log.step_normal("Element [%s]: IsAttribute [%s] <%s> [%s]." % (cls.__name__, name, method, value)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) realvalue = elements[cls.index].get_attribute(name) if method.lower() == 'equal': if value == realvalue: cls.__clearup() return True else: cls.__clearup() return False elif method.lower() == 'not equal': if not value == realvalue: cls.__clearup() return True else: cls.__clearup() return False elif method.lower() == 'contain': if value in realvalue: cls.__clearup() return True else: cls.__clearup() return False elif method.lower() == 'not contain': if not value in realvalue: cls.__clearup() return True else: cls.__clearup() return False elif method.lower() == 'in': if realvalue in value: cls.__clearup() return True else: cls.__clearup() return False else: log.step_fail("code error.") cls.__clearup()
def __wait_for_enabled(cls): elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) if elements[cls.index].is_enabled(): return else: t = 0 while t < 90: if elements[cls.index].is_enabled(): break log.step_normal("Element [%s]: __wait_for_enabled for 1 second, By [%s :: %s :: %s]" % (cls.__name__, cls.by, cls.value, cls.index)) time.sleep(0.5)
def DragAndDropByOffset(cls, xoffset, yoffset): ''' Holds down the left mouse button on the source element, then moves to the target offset and releases the mouse button. ''' log.step_normal("Element [%s]: drag_and_drop_by_offset()" % (cls.__name__)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) action = webdriver.ActionChains(env.threadlocal.BROWSER) action.drag_and_drop_by_offset(elements[cls.index],xoffset, yoffset) action.perform() cls.__clearup()
def IsExist(cls): log.step_normal("Element [%s]: IsExist?" % (cls.__name__)) time.sleep(2) elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) log.step_normal("Element [%s]: IsExist? Count = [%s]" % (cls.__name__, len(elements))) cls.__clearup() if len(elements) > 0: return True else: return False
def MouseOver(cls): log.step_normal("Element [%s]: MouseOver()" % (cls.__name__)) time.sleep(1) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) action = webdriver.ActionChains(env.threadlocal.BROWSER) action.move_to_element(elements[cls.index]) action.perform() cls.__clearup() time.sleep(1)
def ClickTillObjDisappear(cls, obj): ''' DESCRIPTION Sometimes, one click on the element doesn't work. So wait 3 seconds, then click again and again until the expected object "obj" disappear. RISK It may do click() for many times!!! EXAMPLES Login.LoginButton.ClickTillObjDisappear(OverView.Button_Office()) ''' log.step_normal("Element [%s]: ClickTillObjDisappear()" % (cls.__name__)) cls.Click()
def TypeIn(cls, value): '''Input value without clear existing values ''' log.step_normal(u"Element [%s]: TypeIn [%s]." % (cls.__name__, value)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) elements[cls.index].send_keys(value) #======================================================================= # action = webdriver.ActionChains(env.threadlocal.BROWSER) # action.send_keys_to_element(elements[cls.index], value) # action.perform() #======================================================================= cls.__clearup()
def Set(cls, value): log.step_normal(u"Element [%s]: Set [%s]." % (cls.__name__, value)) value = str(value) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) if elements[cls.index].tag_name == "select" or elements[cls.index].tag_name == "ul": cls.Select(value) else: elements[cls.index].clear() action = webdriver.ActionChains(env.threadlocal.BROWSER) action.send_keys_to_element(elements[cls.index], value) action.perform() cls.__clearup()
def ScrollIntoView(cls): log.step_normal(u"Element [%s]: ScrollToView()" % cls.__name__) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) #======================================================================= # print elements[cls.index].location # print elements[cls.index].rect # print elements[cls.index].location_once_scrolled_into_view #======================================================================= i = 0 while not elements[cls.index].is_displayed(): WebBrowser.ScrollTo(0, i) i = i + 10 if i == 1000: log.step_normal("still not displayed. break out.")
def Select(cls, value): log.step_normal("Element [%s]: Select [%s]." % (cls.__name__, value)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) is_selected = False #### select ################ if elements[cls.index].tag_name == "select": options = elements[cls.index].find_elements_by_tag_name('option') for option in options: # log.step_normal("Element [%s]: option [%s]" % (cls.__name__, option.text)) if option.text == value: option.click() is_selected = True break #### ul ################ elif elements[cls.index].tag_name == "ul": lis = elements[cls.index].find_elements_by_tag_name('li') for li in lis: # log.step_normal("Element [%s]: li [%s]" % (cls.__name__, li.text)) if li.text == value: li.click() is_selected = True break #### NOT Supported ################ else: log.step_fail("Element [%s]: Tag [%s] NOT support [Select] method" % (cls.__name__, elements[cls.index].tag_name)) if is_selected is False: log.step_fail("No item selected!") cls.__clearup()
def VerifyVisible(cls, trueORfalse): log.step_normal("Element [%s]: Verify Visible = [%s]." % (cls.__name__, trueORfalse)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) log.step_normal("Element [%s]: Count = [%s]" % (cls.__name__, len(elements))) if elements[cls.index].is_displayed(): if trueORfalse == True: log.step_pass("Visible!") else: log.step_fail("Visible!") else: if trueORfalse == False: log.step_pass("Not Visible!") else: log.step_fail("Not Visible!") cls.__clearup()
def Click(cls): log.step_normal("Element [%s]: Click()" % (cls.__name__)) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) action = webdriver.ActionChains(env.threadlocal.BROWSER) action.click(elements[cls.index]) action.perform() #======================================================================= # action = webdriver.ActionChains(env.threadlocal.BROWSER) # action.key_up(Keys.CONTROL, elements[cls.index]) # action.perform() # # action.click(elements[cls.index]) # action.perform() #======================================================================= cls.__clearup()
def VerifyInnerHTMLContains(cls, contain_content): log.step_normal("Element [%s]: VerifyInnerHTMLContains [%s]." % (cls.__name__, str(contain_content))) cls.__wait() elements = env.threadlocal.BROWSER.find_elements(cls.by, cls.value) inner_html = elements[cls.index].get_attribute('innerHTML') if isinstance(contain_content, list): for content in contain_content: if content in inner_html: log.step_pass("Real inner_hmtl=[%s]" % inner_html) else: log.step_fail("Real inner_hmtl=[%s]" % inner_html) else: if contain_content in inner_html: log.step_pass("Real inner_hmtl=[%s]" % inner_html) else: log.step_fail("Real inner_hmtl=[%s]" % inner_html) cls.__clearup()