第一种:循环取出两个字段,一一进行判断,相等则做点击操作
# 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)
------------------------- A little Progress a day makes you a big success... ----------------------------