コード例 #1
0
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
コード例 #2
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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