Selenium 中对于table的判断

第一种:循环取出两个字段,一一进行判断,相等则做点击操作

  # elements = utils.find_elements(driver, By.CSS_SELECTOR, LSHTaxonomyLocators.LOC_TAXONOMY_TABLE_ROW)
    # # for row in elements:
    # #     if username in row.text and taxonomy_name in row.text:
    # #         action_element = row.find_element(By.CSS_SELECTOR, element_css)
    # #         action_element.click()
    # #         wait_for_window(1)
    # #         return
    # # table > tbody > tr:nth-child(2) > td > div
    #
    # size = len(elements)
    # i = 1
    # flag = 0
    # while i < size:
    #     row = utils.find_element(driver, By.CSS_SELECTOR, LSHTaxonomyLocators.LOC_TAXONOMY_ROW.format(i))
    #     print(row.text)
    #     name = utils.get_text(driver, By.CSS_SELECTOR,
    #                           "table > tbody > tr:nth-child({}) > td.list-name > div >span.list-name-text >div".format(
    #                               i))
    #     creator = utils.get_text(driver, By.CSS_SELECTOR,
    #                              "table > tbody > tr:nth-child({}) > td.list-lastModifiedBy > div".format(i))
    #     if taxonomy_name in row.text and creator.lower() == username.lower():
    #         flag = flag + 1
    #         print("This row {} is ok to choose".format(i))
    #         utils.find_element(driver, By.CSS_SELECTOR,
    #                            "table > tbody > tr:nth-child({}) > td > div >svg".format(i)).click()
    #
    #         # LOC_TAXONOMY_TABLE_ROW = "table.MuiTable-root.list-table > tbody > tr"
    #         # LOC_TAXONOMY_TABLE_ROW_STAR = "td > div > svg"
    #         print("This row {} is chosen successfully".format(i))
    #         utils.wait_for_window()
    #     i = i + 1
    # return flag

  

 

第二种 table tr中,先取tr的值做判断,然后选中tr下的某某

def find_row_n_click_element(driver, row_text, row_css, element_css):
    """Find table row and button in that row, click button"""
    action_rows = find_elements(driver, By.CSS_SELECTOR, row_css)
    for row in action_rows:
        if row_text in row.text:
            action_element = row.find_element(By.CSS_SELECTOR, element_css)
            action_element.click()
            wait_for_window(1)
            return


def find_row_n_click_element_by2(driver, row_text, another_text, row_css, element_css):
    """Find table row and button in that row, click button"""
    action_rows = find_elements(driver, By.CSS_SELECTOR, row_css)
    flag = 0
    for row in action_rows:
        if row_text.lower() in row.text.lower() and another_text.lower() in row.text.lower():
            flag += 1
            action_element = row.find_element(By.CSS_SELECTOR, element_css)
            action_element.click()
            wait_for_window(1)
            return
    return flag

  

 

第三种 常见的utils方法汇总

now = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
date = datetime.now().strftime("%d-%m-%Y")
# ../../screenshot from current file dir
path = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir, os.pardir))
screen_dir = os.path.join(path, "screenshot", str(date))


def screen_path():
    global screen_dir
    if not os.path.exists(screen_dir):
        os.makedirs(screen_dir)
    return screen_dir


def save_screenshot(driver, name):
    driver.get_screenshot_as_file(os.path.join(screen_path(), name + '-' + now + ".png"))


def get_url(driver, url):
    driver.get(url)


def find_element(driver, by_type, locator, delay=3):
    try:
        return WebDriverWait(driver, delay).until(EC.presence_of_element_located((by_type, locator)))

    except TimeoutException:
        print("element {} was not found".format(locator))


def find_elements(driver, by_type, locator, delay=3):
    try:
        return WebDriverWait(driver, delay).until(EC.presence_of_all_elements_located((by_type, locator)))

    except TimeoutException:
        print("element {} was not found".format(locator))


def click(driver, by_type, locator):
    el = find_element(driver, by_type, locator)
    el.click()


def select(driver, option, by_type, locator):
    _select = Select(find_element(driver, by_type, locator))
    _select.select_by_visible_text(option)


def type_text(driver, text, by_type, locator):
    el = find_element(driver, by_type, locator)
    el.click()
    el.send_keys(text)


def clear_text(driver, by_type, locator, delay=3):
    el = find_element(driver, by_type, locator, delay)
    el.click()
    el.clear()


def type_text_press_enter(driver, text, by_type, locator):
    find_element(driver, by_type, locator).send_keys(text)
    find_element(driver, by_type, locator).send_keys(Keys.RETURN)


def get_text(driver, by_type, locator):
    el = find_element(driver, by_type, locator)
    return el.text


def switch_window(driver):
    wait_for_window(5)
    handles = driver.window_handles
    size = len(handles)
    for x in range(size):
        if handles[x] != driver.current_window_handle:
            driver.switch_to.window(handles[x])


def wait_for_window(timeout=2):
    time.sleep(timeout)


def wait_for_title(driver, title, timeout=20):
    try:
        WebDriverWait(driver, timeout).until(EC.title_contains(title))
    except TimeoutException as e:
        return


def find_n_click(driver, button_text, css_selector):
    action_buttons = find_elements(driver, By.CSS_SELECTOR, css_selector)
    for button in action_buttons:
        if button_text in button.text:
            button.click()
            wait_for_window(1)
            break


def find_row_n_click_button(driver, row_text, button_text, row_css, button_css):
    """Find table row and button in that row, click button"""
    action_rows = find_elements(driver, By.CSS_SELECTOR, row_css)
    for row in action_rows:
        if row_text in row.text:
            action_buttons = row.find_elements(By.CSS_SELECTOR, button_css)
            for button in action_buttons:
                if button_text in button.text:
                    button.click()
                    wait_for_window(1)
                    return


def find_row_n_click_element(driver, row_text, row_css, element_css):
    """Find table row and button in that row, click button"""
    action_rows = find_elements(driver, By.CSS_SELECTOR, row_css)
    for row in action_rows:
        if row_text in row.text:
            action_element = row.find_element(By.CSS_SELECTOR, element_css)
            action_element.click()
            wait_for_window(1)
            return


def find_row_n_click_element_by2(driver, row_text, another_text, row_css, element_css):
    """Find table row and button in that row, click button"""
    action_rows = find_elements(driver, By.CSS_SELECTOR, row_css)
    flag = 0
    for row in action_rows:
        if row_text.lower() in row.text.lower() and another_text.lower() in row.text.lower():
            flag += 1
            action_element = row.find_element(By.CSS_SELECTOR, element_css)
            action_element.click()
            wait_for_window(1)
            return
    return flag


def find_hower_n_click(driver, text, css_selector, hover_css_selector):
    rows = find_elements(driver, By.CSS_SELECTOR, css_selector)
    for row in rows:
        if text in row.text:
            view_button = row.find_element(By.CSS_SELECTOR, hover_css_selector)
            hover = ActionChains(driver).move_to_element(view_button)
            hover.perform()
            view_button.click()
            wait_for_window(1)
            break


def refresh_page(driver):
    driver.refresh()


###############
# GLOBAL FUNCTIONS #
###############


def okta_login(driver, endpoint, username, password):
    print("==BEFORE METHOD==")
    print(endpoint)
    driver.get(endpoint)

    if ("LiveRamp Connect" in driver.title) & ("login" in driver.current_url):
        click(driver, By.LINK_TEXT, "Log in with identity provider")
        type_text(driver, "LiveRamp", By.ID, "lr-ui-input-input")
        click(driver, By.CSS_SELECTOR, "button.login-submit-button")
        wait_for_window()

    if "LiveRamp - Sign In" in driver.title or "Liverampsso - Sign In" in driver.title:
        type_text(driver, username, By.ID, "okta-signin-username")
        click(driver, By.ID, "okta-signin-password")
        type_text(driver, password, By.ID, "okta-signin-password")
        click(driver, By.ID, "okta-signin-submit")

    count = 0
    while ("Sign In" in driver.title) and (count < 5):
        wait_for_window()
        count += 1
    # close banners
    close_popup_banner(driver)


def close_popup_banner(driver):
    dialog_button = find_element(driver, By.CSS_SELECTOR, 'button[id^="pendo-button"]')
    if dialog_button is None:
        dialog_button = find_element(driver, By.CSS_SELECTOR, 'button[id^="pendo-close"]')
    if dialog_button is not None:
        dialog_button.click()


def global_chrome_options(chrome_options, mode):
    chrome_options.add_argument('--no-sandbox')
    if mode == 'headless':
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        chrome_options.add_argument('--disable-dev-shm-usage')
        chrome_options.add_argument('window-size=1920x1480')
    return chrome_options


def select_file_to_upload(driver, file_name, input_css_selector, connection="Connection", key="GCS"):
    local_name = file_name.rsplit("/", 1)[-1]
    f = open(os.path.abspath(os.getcwd()) + '/' + local_name, "wb")
    if connection == "Connection":
        parsers.CONNECTIONS[key].read_stream(f, file_name, None, None, gcp.PREFIX_RELIABILITY)
    elif connection == "Connection_LSH":
        """Support the connection to LSH GCP"""
        parsers.CONNECTIONS_LSH[key].read_stream(f, file_name, None, None, gcp.PREFIX_QUALITY)
    f.close()
    find_element(driver, By.CSS_SELECTOR, input_css_selector).send_keys(
        os.path.abspath(os.getcwd()) + '/' + local_name)

  

posted @ 2021-03-03 20:24  巴黎爱工作  阅读(282)  评论(0编辑  收藏  举报