You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

46 lines
1.4 KiB

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
class ElementIn(object):
default_find_fn = 'find_element'
def __init__(self, element, locator, find_fn=None):
self.element = element
self.locator = locator
self.find_fn = self.default_find_fn if find_fn is None else find_fn
def __call__(self, driver):
try:
return getattr(self.element, self.find_fn)(self.locator)
except:
return False
class ElementsIn(ElementIn):
default_find_fn = 'find_elements'
class SeleniumExtensions(object):
@classmethod
def wait_elem(cls, driver, locator, inside_el=None, wait_time=10):
if inside_el:
return WebDriverWait(driver, wait_time).until(ElementIn(inside_el, locator))
return WebDriverWait(driver, wait_time).until(
EC.presence_of_element_located(locator)
)
@classmethod
def wait_elems(cls, driver, locator, inside_el=None, wait_time=10):
if inside_el:
return WebDriverWait(driver, wait_time).until(ElementsIn(inside_el, locator))
return WebDriverWait(driver, wait_time).until(
EC.presence_of_all_elements_located(locator)
)