2015-08-01 2 views
2

У меня есть объект страницы, который взаимодействует с несколькими элементами на DOM. Если я создаю объект WebDriverWait для инициализации объекта страницы в качестве члена экземпляра, могу ли я использовать его для всех ожиданий?Можно ли повторно использовать объект WebDriverWait?

Или, если я хочу подождать два отдельных элемента, лучше иметь два WebDriverWait s?

Я испытываю некоторые странные TimeoutException, и мне интересно, может быть. Как:

class MyPage(object): 
    def __init__(self, driver): 
     self.driver = driver 
     self.wait = WebDriverWait(driver, 10) 

    def get_search_box(self): 
     return self.wait.until(EC.presence_of_element_located('srch')) 

    def get_search_btn(self): 
     return self.wait.until(EC.presence_of_element_located('btn')) 

против:

def get_search_btn(self): 
     wait = WebDriverWait(self.driver, 10) 
     return wait.until(EC.presence_of_element_located('btn')) 

ответ

2

Я думаю, что вам нужно, это функция, вы можете использовать по мере необходимости. Посмотрите на следующую функцию, например:

def wait_for_element_to_be_visible(self, *locator): 
    """Wait for an element to become visible""" 
    self.selenium.implicitly_wait(0) 
    try: 
     WebDriverWait(self.selenium, self.timeout).until(
      lambda s: self._selenium_root.find_element(*locator).is_displayed()) 
    except TimeoutException: 
     Assert.fail(TimeoutException) 
    finally: 
     self.selenium.implicitly_wait(self.testsetup.default_implicit_wait) 
+0

Да. Я могу использовать функцию для создания объекта Wait для меня, но хотел бы знать, имеет ли он побочный эффект, если я этого не делаю. – norbertpy

+0

Существует разница в использовании неявных и явных ожиданий в селене. Использование неявного ожидания рекомендуется, если вы хотите полностью загрузить приложение, опросив DOM в течение определенного времени, и как только элемент будет найден, webdriver переходит к следующему шагу. Прочитайте документацию здесь, чтобы ждать дополнительной информации - 'http: // docs.seleniumhq.org/docs/04_webdriver_advanced.jsp' – Amit

+1

Я не читал ур обновленный вопрос. Ваш первый пример отлично выглядит там, где вы повторно используете один и тот же экземпляр. Нет необходимости создавать новые экземпляры каждый раз. – Amit

Смежные вопросы