#python #selenium #automation
#python #selenium #автоматизация
Вопрос:
Я создал 2 файла. a.py имеет класс foo() и b.py имеет класс fun(). fun() является дочерним классом foo(). foo() имеет функцию, приведенную ниже:
def get_random_password(self):
" func to generate random password "
try:
password_characters = string.ascii_letters string.digits string.punctuation
nw_password = ''.join(random.choice(password_characters) for i in range(30))
return nw_password
теперь я хочу использовать эту переменную nw_password в какой-либо другой функции fun() (приведенная ниже функция используется для входа пользователя)
username = self.driver.find_element_by_id("username")
time.sleep(3)
username.send_keys(self.vm_spec_dic['name'])
time.sleep(5)
password = self.driver.find_element_by_id("password")
time.sleep(5)
password.send_keys(nw_password)
time.sleep(10)
login = self.driver.find_element_by_id("loginBtn")
login.click()
Я использую selenium для автоматизации. Я хочу вызвать переменную nw_password из a.py чтобы b.py . но получение ошибки? Я получаю ошибки, такие как модуль ‘lib.b’ не имеет атрибута ‘nw_password’????
from a import nw_password
Импорт не работает
Комментарии:
1. переменные внутри оператора try заключены в свой собственный блок
2. Он говорит, что даже не может импортировать
3. Какова структура вашего проекта?
4. Также, как показано в приведенном ниже ответе, для этой строки
password.send_keys(nw_password)
вам нужно вызватьnw_password
функцию:password.send_keys(nw_password())
5. Oishin, пожалуйста, обновите вопрос с ошибкой, с которой вы столкнулись при импорте. Возможно
a
, это имя чего-то в стандартной библиотеке python, возможно, вам придется переименовать файл
Ответ №1:
Область действия переменной находится только внутри определения функции, вероятно, вы могли бы использовать переменную и сохранить возврат метода get_random_password(self)
var = yourObjectFromfoo.get_random_password()
затем попробуйте импортировать эту переменную
Комментарии:
1. Кажется, он не может импортировать модуль в первую очередь
2. Это немного расплывчато, но он сказал (модуль ‘lib.b’ не имеет атрибута ‘nw_password’), поэтому я подумал, что у него проблема с переменной, а не с самим модулем, в любом случае он не может импортировать переменную таким образом, даже если модуль можно импортировать
3. @oshinaggrawal вы получаете сообщение об ошибке при импорте?
4. @RolvApneseth да .. там написано, что атрибута нет
5. @MohammedEzzat вызывает nw_password как глобальную переменную, которая невозможна для файлов????
Ответ №2:
Чтобы импортировать вашу функцию, попробуйте это:
from a import get_random_password
Если вы хотите сохранить ее в переменной с именем nw_password
, вы можете сделать это в своем основном файле:
nw_password = get_random_password()
nw_password
это просто имя вашего возвращаемого значения, которое вы нигде не сохраняете. Итак, чтобы получить случайный пароль, вам нужно фактически запустить созданную вами функцию. И, как говорили другие, переменная в любом случае будет находиться внутри области действия функции, поэтому вам придется сделать ее глобальной переменной (не рекомендуется).
Комментарии:
1. Чтобы вызвать только значение
nw_password
из файла, внутри a, вы должны были бы сказать, вне функции, напишите:nw_password = get_random_password()
тогда внутри вашего основного файла вы теперь можете использоватьfrom a import nw_password
2. ошибка при импорте nw_password ImportError: не удается импортировать имя ‘nw_password’, возникает ошибка
3. Просто выполните метод top, в котором в свой основной файл вы импортируете функцию, созданную в
a