Предположим, у вас есть HTML, похожий на этот:
Lorem Ipsum 1
Lorem Ipsum 2
Lorem Ipsum 3
Lorem Ipsum 4
Вы можете сделать что-то вроде:
let divCol = document.getElementsByClassName('test');
let arr = Array.prototype.slice.call(divCol);
for (let i = 0; i < arr.length; i++) {
console.log(arr[i].firstChild.textContent);
}
Таргетинг сначала дочерний элемент в каждом элементе div
, который будет абзацем, а затем захватывает textContent
этого текста абзаца.
Вывод на консоль:
Lorem Ipsum 1
Lorem Ipsum 2
Lorem Ipsum 3
Lorem Ipsum 4
Получить текст абзаца внутри элемента
nodeValue против innerHTML и textContent. Как выбрать?
Если Вы хотите импортировать модуль, одновременно удостоверяясь, что он ничего не импортирует, можно заменить __import__
встроенная функция.
Например, используйте этот класс:
class ImportWrapper(object):
def __init__(self, real_import):
self.real_import = real_import
def wrapper(self, wantedModules):
def inner(moduleName, *args, **kwargs):
if moduleName in wantedModules:
print "IMPORTING MODULE", moduleName
self.real_import(*args, **kwargs)
else:
print "NOT IMPORTING MODULE", moduleName
return inner
def mock_import(self, moduleName, wantedModules):
__builtins__.__import__ = self.wrapper(wantedModules)
try:
__import__(moduleName, globals(), locals(), [], -1)
finally:
__builtins__.__import__ = self.real_import
И в Вашем тестовом коде, вместо записи import myModule
, запись:
wrapper = ImportWrapper(__import__)
wrapper.mock_import('myModule', [])
Второй аргумент mock_import
список имен модуля, которые Вы действительно хотите импортировать во внутреннем модуле.
Этот пример может быть изменен далее к, например, импортировать другой модуль, чем желаемый вместо того, чтобы просто не импортировать его или даже дразнить объект модуля с некоторым собственным пользовательским объектом.
Если Вы действительно хотите слоняться без дела с механизмом импорта Python, смотреть на ihooks
модуль. Это обеспечивает инструменты для изменения поведения __import__
встроенный. Но не ясно из Вашего вопроса, почему необходимо сделать это.
"импорт много других файлов"? Импорт много других файлов, которые являются частью Вашей специализированной кодовой базы? Или импорт много других файлов, которые являются частью распределения Python? Или импорт много других файлов проекта с открытым исходным кодом?
Если Ваш импорт не работает, у Вас есть "простое" PYTHONPAT
H проблема. Получите все свои различные каталоги проекта на a PYTHONPATH
то, что можно использовать для тестирования. У нас есть довольно сложный контур, в Windows мы управляем им как это
@set Part1=c:\blah\blah\blah
@set Part2=c:\some\other\path
@set that=g:\shared\stuff
set PYTHONPATH=%part1%;%part2%;%that%
Мы разделяем каждую часть пути так, чтобы мы (a) знаем, куда вещи прибывают из и (b) можем управлять изменением, когда мы перемещаем вещи.
Начиная с PYTHONPATH
ищется в порядке, мы можем управлять тем, что привыкает путем корректировки порядка на путь.
После того как у Вас есть "все", это становится вопросом доверия.
Также
Или
Вы не доверяете чему-то (т.е. Ваш собственный код) и Вы
Вы протестировали бы библиотеки Python? Если так, у Вас есть большая работа. В противном случае затем необходимо, возможно, только дразнить вещи, которые Вы на самом деле собираетесь протестировать.
В Вашем комментарии выше, Вы говорите, что хотите убедить Python, что определенные модули были уже импортированы. Это все еще походит на странную цель, но если это действительно, что Вы хотите сделать, в принципе можно красться вокруг за спиной механизма импорта и изменением sys.modules
. Не уверенный, как это работало бы на импорт пакета, но должно быть хорошо для абсолютного импорта.
Никакое трудное управление не необходимо, если Вы хотите быструю-и-грязную фиксацию перед своими модульными тестами.
Если модульные тесты находятся в том же файле как код, Вы хотите протестировать, просто удалить нежелательный модуль из globals()
словарь.
Вот довольно долгий пример: предположите, что у Вас есть модуль impp.py
с содержанием:
value = 5
Теперь, в Вашем тестовом файле можно записать:
>>> import impp
>>> print globals().keys()
>>> def printVal():
>>> print impp.value
['printVal', '__builtins__', '__file__', 'impp', '__name__', '__doc__']
Отметьте это impp
среди globals, потому что он был импортирован. Вызывание функции printVal
это использует impp
модуль все еще работает:
>>> printVal()
5
Но теперь, если Вы удаляете impp
ключ от globals()
...
>>> del globals()['impp']
>>> print globals().keys()
['printVal', '__builtins__', '__file__', '__name__', '__doc__']
... и попытайтесь звонить printVal()
, Вы доберетесь:
>>> printVal()
Traceback (most recent call last):
File "test_imp.py", line 13, in <module>
printVal()
File "test_imp.py", line 5, in printVal
print impp.value
NameError: global name 'impp' is not defined
... который является, вероятно, точно, чего Вы пытаетесь достигнуть.
Для использования его в модульных тестах можно удалить globals прежде, чем выполнить набор тестов, например, в __main__
:
if __name__ == '__main__':
del globals()['impp']
unittest.main()