簡體   English   中英

pytest-bdd--> Selenium Webdriver python AttributeError: 'NoneType' object has no attribute 'execute_script' 從 conftest.py 調用 pytest 夾具

[英]pytest-bdd--> Selenium Webdriver python AttributeError: 'NoneType' object has no attribute 'execute_script' calling pytest fixture from conftest.py

調用 webdriver 對象時出現此錯誤; 這已在夾具中定義。 請參考以下詳情:

代碼結構

測試

特征

design.feature

step_defs

__init__.py

conftest.py

test1.py

design.feature 中的代碼:

Feature:
 As a user I want to do something...etc

Scenario: Create design
    Given the user log in to "Electric"
    When set the map area 52.21623,0.12519

test1.py 中的代碼:

scenario('../features/design.feature', 'Create design')

def test_create_design():
    pass


@given(parsers.parse('the user log in to "{name}"'), target_fixture='browser')
def login(browser, name: str):
    browser.get(login_url)
    browser.maximize_window()
    username_box = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "login-user")))
    username_box.send_keys(username)
    password_box = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.ID, "login-pass")))
    password_box.send_keys(password)
    elm = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.ID, "login-submission")))
    elm.click()
    time.sleep(5)
    if name == 'Electric':
        elm = WebDriverWait(browser, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//*[@class='ui-layout-center ui-layout-pane ui-layout-pane-center']/"
                                                  "div[@id='app_options' ]/*[@class='box app_options_box'][2]")))
        elm.click()

    elif name == "Configuration":
        elm = WebDriverWait(browser, 10).until(
            EC.element_to_be_clickable(
                (By.XPATH, "//*[@class='ui-layout-center ui-layout-pane ui-layout-pane-center']/"
                           "div[@id='app_options' ]/*[@class='box app_options_box']"))
        )
        elm.click()
    time.sleep(5)
    


@when(parsers.parse('set the map area {lat},{long}'))
def set_map_area_and_center(browser, lat: float, long: float):

    print('you are here')
    time.sleep(5)
    browser.execute_script(f"myw.app.map.setView(myw.latLng({lat}, {long}))")
    time.sleep(3)
    browser.quit()

conftest.py 中的代碼:

@pytest.fixture
def browser():
    w = webdriver.Chrome()
    yield w
    w.quit()

結果:

AttributeError:當函數 set_map_area_and_center 運行時,“NoneType”對象沒有屬性“execute_script”--> 在 browser.execute_script 行。 這讓我覺得對象不是從瀏覽器裝置返回的? 在功能登錄中第一次調用時,夾具瀏覽器正在工作。

預期結果:

能夠多次調用 conftest.py 或 test1.py 中的夾具。

誰能幫我理解為什么在第一個實例(功能登錄)夾具瀏覽器工作而第二個(功能 set_map_area_and_center)沒有,以及如何解決這個問題? 干杯。

筆記:

在@given 裝飾器處,不應該是 target_fixture,這將“創建”並使用另一個夾具調用瀏覽器 - 在我的情況下,當 @when 裝飾器想要使用瀏覽器夾具時,pytest 會引發錯誤,因為基本上可以看到它使用相同的名稱創建了 2 次並且無法識別它,因此是“無”類型。 工作,而不是:

@given(parsers.parse('the user log in to "{name}"'), target_fixture='browser')
def login(browser, name: str):
    browser.get(login_url)

應該:

@given(parsers.parse('the user log in to "{name}"'))
def login(browser, name: str):
    browser.get(login_url)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM