[英]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.