Я пытаюсь создать свой собственный модуль в python, который выполняет действия с использованием селена, но я борюсь с импортом переменных - PullRequest
0 голосов
/ 02 августа 2020

Вот что у меня есть на данный момент:

Мой модуль называется myModule, и у меня есть подкаталоги с init .py для каждого из именованных 'actions' и 'xpaths', которые я импортирую.

from myModule import actions

в «действиях» У меня есть функция siteLogin, и я хочу использовать переменные из другой части моего модуля под названием xpaths:

from textLayer import xpaths
def siteLogin(webdriver, user, pass):
  webdriver.get('https://www.youtube.com')
  webdriver.find_element_by_xpath(xpaths.loginButtonXPath).click()

и, наконец, в textLayer у меня есть xpaths :

loginButtonXPath = '//*[@id="button"]'

но когда я пытаюсь запустить этот код из командной строки,

from selenium import webdriver
from myModule import actions
driver = webdriver.Firefox()
driver.implicitly_wait(10)
siteUser = 'myUsername'
sitePass = 'myPassword'
actions.siteLogin(driver, siteUser, sitePass)

я получаю сообщение об ошибке:

NameError: name 'loginButtonXPath' не определено

, и я попытался импортировать xpaths из командной строки, но это не сработало. Что действительно работает, так это ввести строку без использования переменной, но я хотел бы иметь возможность использовать переменную, чтобы ее можно было изменить в будущем.

Также ввод

print(xpaths.loginButtonXPath)

работает так, как предполагалось для печати строки, если я импортирую 'xpaths' в основной код.

Заранее благодарим за любую информацию.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

По какой-то причине, когда я удаляю часть 'driver.get (...)' из функции и вызываю ее индивидуально, все остальное работает. Я не совсем уверен, почему, но полагаю, что позже на это будет другой вопрос. На данный момент решение состоит в том, чтобы изолировать нажатие (а также ввод имени пользователя и пароля и т. Д. c.) От его собственной функции. Кроме того, я импортировал переменные в фактическую командную строку python, а не внутри функции 'actions' init .py, но я не уверен, имеет это значение или нет.

0 голосов
/ 02 августа 2020

Попробуйте переименовать каждый из ваших файлов init.py в __init__.py.

...