Медленное выполнение настроенного is_element_present - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть в теле метода другого метода:

for i in range(60):
    try:
        if sel.is_element_present("//div[@id='result']/form[3]/strong/div/button"): break
    except: pass
    time.sleep(1)

, и он выполняется за 5 секунд.

На сайте ничего не меняется, и я выполняю эту строку:

self.WaitForElement(u"//div[@id='result']/form[3]/strong/div/button")     


def WaitForElement(self,name):
    for i in range(60):
        try:
            if sel.is_element_present(name): break
        except: pass
        time.sleep(1)

и он выполняется почти за 30 секунд, так что это очень странно.

У вас есть идеи?

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Вот что у меня есть для метода is_element_present:

   def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException, e: return False
    return True

Так как он уже делает попытку ... кроме блока, вам не нужно оборачивать его в попытку ... кроме как снова. Так как is_element_present будет возвращать только True или False, часть кода исключая: pass, вероятно, никогда не будет выполнена. Вместо этого просто используйте оператор if.

Я также думаю, что в вашем коде есть опечатка ("sel" вместо "self").

0 голосов
/ 14 декабря 2010

Быстро просматривая ваш код, я вижу только то, что вы определили стандартную строку в первом примере, но строку Юникода во втором.

...