Я пытаюсь написать свое собственное ожидаемое условие. Что мне нужно... У меня есть iframe. и у меня также есть изображение. Я хочу продолжить обработку, когда сглаживание изображения изменится. Что я сделал:
class url_changed_condition(object):
'''
Checks whether url in iframe has changed or not
'''
def __init__(self, urls):
self._current_url, self._new_url = urls
def __call__(self, ignored):
return self._current_url != self._new_url
а затем в коде, который у меня есть:
def process_image(self, locator, current_url):
try:
WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.TAG_NAME, u"iframe")))
iframe = self.driver.find_element(*locator)
if iframe:
print "Iframe found!"
self.driver.switch_to_frame(iframe)
WebDriverWait(self.driver, 10).until(ec.presence_of_element_located((By.XPATH, u"//div")))
# WebDriverWait(self.driver, 10).until(
# url_changed_condition(
# (current_url, self.driver.find_element(By.XPATH, u"//a/img").get_attribute(u"src"))))
img_url = self.driver.find_element(By.XPATH, u"//a/img").get_attribute(u"src")
print img_url
self.search_dict[self._search_item].append(img_url)
self.driver.switch_to_default_content()
except NoSuchElementException as NSE:
print "iframe not found! {0}".format(NSE.msg)
except:
print "something went wrong"
import traceback
import sys
type_, value_, trace_ = sys.exc_info()
print type_, value_
print traceback.format_tb(trace_)
finally:
return current_url
Этот код работает, но возвращает один и тот же URL-адрес несколько раз. Проблема заключается в том, когда я раскомментирую url_changed_condition
он падает с TimeoutException
в (current_url, self.driver.find_element(By.XPATH, u"//a/img").get_attribute(u"src"))
Строка под ним отлично работает... Я не понимаю.