def check_filling_fields_required(driver): ''' Check if filling any fields is required in checkout page ''' inputs = driver.find_elements_by_css_selector("input[type='text']") inputs += driver.find_elements_by_css_selector("input[type='tel']") inputs += driver.find_elements_by_css_selector("textarea") user_result = False payment_result = False for element in inputs: if can_click(element): label_text = get_label_text_with_attribute(driver, element) if not user_result and nlp.check_text( label_text, ["street", "address"], ["shipping address", "email"]): user_result = True elif not payment_result and nlp.check_text( label_text, ["cardholder", "card number", "expire"]): payment_result = True elif user_result and payment_result: return 3 if user_result: return 1 elif payment_result: return 2 return 0
def find_radio_or_checkbox_buttons(driver, contains=None, not_contains=None): radiobtns = driver.find_elements_by_css_selector("input[type='radio']") checkbtns = driver.find_elements_by_css_selector("input[type='checkbox']") result = [] for elem in radiobtns + checkbtns: text = elem.get_attribute("outerHTML") if nlp.check_text(text, contains, not_contains): result.append(elem) else: l_text = get_label_text_with_attribute(driver, elem) if l_text and nlp.check_text(l_text, contains, not_contains): result.append(elem) return result
def find_buttons(driver, contains=None, not_contains=None): # Yield isn't good because context can change result = [] for elem in get_buttons(driver): if not can_click(elem): continue text = elem.get_attribute("innerHTML").strip() + \ elem.text + " " + \ (elem.get_attribute("value") if elem.get_attribute("value") else "") if nlp.check_text(text, contains, not_contains): result.append(elem) return result
def find_links(driver, contains=None, not_contains=None): result = [] for link in get_links(driver): if not can_click(link): continue if get_url(driver) == link.get_attribute("href"): continue text = link.get_attribute("outerHTML") if nlp.check_text(text, contains, not_contains): result.append(link) return result
def find_text_element(driver, contains=None, not_contains=None): label = driver.find_elements_by_tag_name('label') h_elements = driver.find_elements_by_tag_name('h') span = driver.find_elements_by_tag_name('span') p = driver.find_elements_by_tag_name('p') td = driver.find_elements_by_tag_name('td') li = driver.find_elements_by_css_selector('li') for ind in range(1, 6): h_elements += driver.find_elements_by_tag_name('h%s' % str(ind)) result = None for elem in label + h_elements + span + p + td + li: text = elem.get_attribute("outerHTML") if nlp.check_text(text, contains, not_contains): result = elem return result
def find_error_elements(driver, contains=None, not_contains=None): divs = driver.find_elements_by_css_selector("div") spans = driver.find_elements_by_css_selector("span") label = driver.find_elements_by_css_selector("label") p = driver.find_elements_by_css_selector("p") ul = driver.find_elements_by_css_selector("ul") # Yield isn't good because context can change result = [] try: for div in divs + spans + label + p + ul: if div.is_displayed(): div_class = div.get_attribute("class") if nlp.check_text(div_class, contains, not_contains) and \ (div.get_attribute("innerHTML").strip() and not "error hide" in div.get_attribute("innerHTML").strip().lower()): result.append(div) except: result = [] pass return result
def find_sub_elements(driver, element, contains=None, not_contains=None): links = [ elem for elem in element.find_elements_by_tag_name("a") if not is_link(driver, elem) ] buttons = element.find_elements_by_tag_name("button") inputs = element.find_elements_by_css_selector('input[type="button"]') submits = element.find_elements_by_css_selector('input[type="submit"]') imgs = element.find_elements_by_css_selector('input[type="image"]') # Yield isn't good because context can change result = [] for elem in links + buttons + inputs + submits + links + imgs: if not can_click(elem): continue text = elem.get_attribute("outerHTML") if nlp.check_text(text, contains, not_contains): result.append(elem) return result