python - AttributeError:“上下文”对象没有属性“应用程序”
问题描述
您好,我没有找到类似问题的答案,所以我添加了新主题。我对使用页面对象模型的 bdd + appium 有疑问。当我运行我的脚本时,我遇到了问题:
Traceback (most recent call last):
File "/home/mimy/.local/lib/python3.8/site-packages/behave/model.py", line 1329, in run
match.run(runner.context)
File "/home/mimy/.local/lib/python3.8/site-packages/behave/matchers.py", line 98, in run
self.func(context, *args, **kwargs)
File "features/steps/allow_to_app_steps.py", line 6, in tap_allow_when_using_app
context.app.launch_page.tap_allow_button()
File "/home/mimy/.local/lib/python3.8/site-packages/behave/runner.py", line 321, in __getattr__
raise AttributeError(msg)
AttributeError: 'Context' object has no attribute 'app'
我的 environment.py 文件如下所示:
from appium import webdriver
from app.application import Application
def before_scenario(context, scenario):
desired_capabilities = {
"platformName": "Android",
"platformVersion": "10",
"deviceName": "Pixel 2 XL",
"appPackage": "com.xxx.xxx",
"appActivity": ".ui.MainActivity",
"automationName": "UiAutomator2"
}
context.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities=desired_capabilities)
context.driver.implicitly_wait(5)
context.app = Application(context.driver)
def after_scenario(context, scenario):
context.driver.quit()
我的步骤文件如下所示:
from behave import given, when, then, step
@given('I click on the "Allow only while using the app" button')
def tap_allow_when_using_app(context):
context.app.launch_page.tap_allow_button()
@when('I click on the "Allow" button')
def tap_allow(context):
context.app.launch_page.tap_allow()
我的页面对象模型的页面文件如下所示:
###LunchPage###
from selenium.webdriver.common.by import By
from pages.base_page import Page
class LaunchPage(Page):
dialog_title = (By.XPATH, "//android.widget.TextView[contains(@text,'Allow QSpot to access this device')]")
allow_only_while_using_the_app = (By.XPATH, "//android.widget.Button[@text='Allow only while using the app']")
allow = (By.XPATH, "//android.widget.Button[@text='Allow']")
def tap_allow_button(self):
self.click(*self.allow_only_while_using_the_app)
def tap_allow(self):
self.click(*self.allow)
###BasePage###
class Page:
def __init__(self, driver):
self.driver = driver
def find_element(self, *locator):
return self.driver.find_element(*locator)
def click(self, *locator):
e = self.find_element(*locator)
e.click()
和类应用
from pages.launch_page import LaunchPage
class Application:
def __init__(self, driver):
self.launch_page = LaunchPage(driver)
因为我现在这个问题可能与“驱动程序没有启动”有关,但我无法修复它。非常感谢您的帮助!
解决方案
就我而言,我错过了架构名称中的名称。所以从“环境”改为“环境”后(缺少N)。它变得活跃起来。
推荐阅读
- asp.net-mvc - 如何保护没有验证的旧网站?
- ruby - 配置文件,logstash ruby filter event.get("message").match() 错误
- python-3.x - 使用 pickle 加载 TfidfVectorizer 时解决 AttributeError
- python - virtualenv 在数字海洋的 ubuntu 18.04 服务器上失败
- sql - 如何使用链接服务器中的存储过程将 int 传递给 OPEN QUERY?
- angular - 如何在不同目录中使用 Angular CLI
- google-fonts - font-family Work Sans 在 Google Chrome 中不起作用
- scala - 火花:java.lang.NoClassDefFoundError:scala/collection/mutable/ArraySeq$ofRef
- excel - Excel:如何将混合数据的单列排序到表格中
- ios - 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序时出错