【问题标题】:I have problem with import class from another (Python)我从另一个(Python)导入类有问题
【发布时间】:2022-01-11 05:45:20
【问题描述】:

问题是我无法从另一个文件夹导入类。我要在 LoginPage.py 中导入的类。

@ login.py


from selenium import webdriver

import time

import unittest

from Selenium.POMProjectDemo.Pages.LoginPage import LoginPage

class loginTest(unittest.TestCase):

@classmethod
def setUpClass(cls):
    cls.driver = webdriver.Chrome(executable_path='D:\python\Selenium\chrome_driver\chromedriver.exe')#, options = webdriver.ChromeOptions())
    #options.add_experimental_option('excludeSwitches', ['enable-logging'])
    cls.driver.implicitly_wait(30)
    cls.driver.maximize_window()


def test_01_login_valid(self):
    driver = self.driver
    driver.get('https://vk.com/')
    login = LoginPage(driver)
    login.enter_user_name()
    login.enter_user_password()
    login.login_button


@classmethod
def tearDownClass(cls):
    cls.driver.close()
    cls.driver.quit()
    print('test completed')


@Loginpage.py





from Selenium.POMProjectDemo.Locators.Locators import locators

from auth_data import vk_password,vk_login

from POMProjectDemo.Locators import Locators

class LoginPage():
def __init__(self, driver):
    self.driver = driver
    self.index_email_id = locators.index_email_id
    self.index_pass_id = locators.index_pass_id
    self.loginButton_id = locators.loginButton_id

def enter_user_name(self):

    self.driver.find_element_by_id(self.loginField_id).clear()
    self.driver.find_element_by_id(self.loginField_id).send_keys(vk_login)

def enter_user_password(self):
    self.driver.find_element_by_id(self.passwordField_id).clear()
    self.driver.find_element_by_id(self.passwordField_id).send_keys(vk_password)

def login_button(self):
    self.driver.find_element_by_id(self.loginButton_id).click()

错误:

ModuleNotFoundError: No module named 'Selenium'

【问题讨论】:

  • 根据您的权限使用pip install seleniumsudo pip install selenium 先安装Selenium。
  • Selenium(大写)你自己的包名吗?
  • @Subtain Reza Selenium/pip 已安装。一切正常,问题只是导入类。
  • @Lei Yang 没有,这里是LoginPage.py的路径 D:\python\Selenium\POMProjectDemo\Pages\LoginPage.py
  • 尝试在顶部添加这一行sys.path.append(r'D:\python\')

标签: python selenium-webdriver import


【解决方案1】:

python 计算导入路径的方法是首先查看 sys.path 中的条目,并检查您尝试导入的模块是否可以从任何路径访问。它将在您的模块所在的第一个路径处停止。

例如

>>> sys.path
['', '/home/bhakta/dev/sonar/controller/venv/lib/python37.zip', '/home/bhakta/dev/sonar/controller/venv/lib/python3.7', '/home/bhakta/dev/sonar/controller/venv/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7', '/home/bhakta/dev/sonar/controller/venv/lib/python3.7/site-packages']

假设您在 /tmp 中有一个名为“some_module”的模块

➜ ll /tmp/some_module
total 4
-rw-rw-r-- 1 bhakta bhakta 29 Jan 11 11:39 __init__.py

➜ cat /tmp/some_module/__init__.py
def foo():
   print("Hello")
➜ python
Python 3.7.10 (default, Oct 19 2021, 17:50:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/tmp")
>>> import some_module
>>>
>>>
>>> some_module.foo()
Hello

现在,假设你有

➜ ll /var/tmp/some_module
total 4
-rw-rw-r-- 1 bhakta bhakta 45 Jan 11 11:43 __init__.py

➜ cat /var/tmp/some_module/__init__.py
def foo():
    print("From var/tmp Hello")

你做到了:

➜ python
Python 3.7.10 (default, Oct 19 2021, 17:50:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/tmp")
>>> sys.path.append("/var/tmp")
>>>
>>>
>>> import some_module
>>>
>>>
>>> some_module.foo()
Hello

请注意,python 找到了找到 some_module 的第一个系统路径 (/tmp)。

因此:

➜ python
Python 3.7.10 (default, Oct 19 2021, 17:50:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.append("/var/tmp")
>>> sys.path.append("/tmp")
>>> import some_module
>>>
>>> some_module.foo()
From var/tmp Hello

【讨论】:

  • 非常感谢您的精彩探索!我添加了 import sys sys.path.append(r"D:\python/Selenium/POMProjectDemo/Pages")。现在开始工作了
  • 现在,我有另一个问题,即:文件“d:\python\Selenium\POMProjectDemo\Tests\login.py”,第 28 行,在 test_01_login_valid login = LoginPage(driver) TypeError: 'module ' 对象不可调用。会不会和进口有关还是有其他问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
相关资源
最近更新 更多