Я предполагаю, что вы получаете typeError, потому что
driver.find_element_by_xpath()
возвращает WebElement, который по какой-либо причине не может быть преобразован в логическое значение для ваших операторов if. Попробуйте переключиться на
driver.find_elements_by_xpath()
. Этот метод все равно будет работать, даже если найден только один элемент, он просто возвращает массив, содержащий этот элемент. Это важно, потому что python может видеть массив длины 1+ (если найден один или несколько элементов) и преобразовывать его в логическое значение как true.
Пул автовыпуска обычно выпускается после каждого повторения цикла выполнения. Примерно, каждое Сенсорное приложение Какао и Какао структурировано как это:
Get the next message out of the queue
Create an autorelease pool
Dispatch the message (this is where your application does its work)
Drain the autorelease pool
То, что Вы описываете, является ожидаемым поведением. Если Вы хотите иметь в наличии объект еще, чем который, необходимо будет явно сохранить его.
Используя autorelease
способ сказать, "Объект, я больше не хочу Вас, но я собираюсь передать Вас кому-то еще, кто мог бы хотеть Вас, просто еще не исчезайте". Таким образом, объект будет слоняться поблизости достаточно долго, чтобы Вы возвратили его из метода, или дайте его другому объекту. Когда некоторый код хочет иметь в наличии объект, он должен требовать владения retain
луг это.
См. инструкции по управлению памятью для всего, что необходимо знать для использования autorelease
правильно.
Вот пример, обеспеченный в документе управления памятью Apple:
– (id)findMatchingObject:(id)anObject
{
id match = nil;
while (match == nil) {
NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
/* Do a search that creates a lot of temporary objects. */
match = [self expensiveSearchForObject:anObject];
if (match != nil) {
[match retain]; /* Keep match around. */
}
[subPool release];
}
return [match autorelease]; /* Let match go and return it. */
}
Только гарантируется, что автовыпущенные объекты будут выпущены после конца Вашего метода. В конце концов, метод, который названный Вашим методом, возможно, создал его собственный пул и выпускать его прямо после Вашего метода.
Да, это - лучший подход. Автовыпуск действительно только предназначается для взаимодействий в коде, что Вы знаете. После того как Вы храните объект, необходимо или знать, что объект, который содержит ссылку, не умрет/выйдет объем, пока Вы не будете также сделаны с объектом, или необходимо сохранить объект.