将 Appium 驱动程序实例从一个 class 传递到另一个
Pass Appium driver instance from one class to another
我正在自动化一个 android 应用程序并在设置 class 文件中使用功能方法并从该方法返回驱动程序实例。
我的一个页面有一个 class 文件,我在其中调用该功能方法并使用驱动程序实例来定位元素,尽管我无法在其他 class 中使用该驱动程序实例] 文件。最好的方法是什么?
这应该用 OOP 来完成。
您应该定义一个用于创建驱动程序实例的 main class 并在其中定义创建驱动程序实例。然后从主 class 继承其他 classes。
假设我们称它为MainClass
。然后我们应该自动化我们应用程序的两个部分,如 Register
和 Login
。它应该这样实现:(Python)
MainClass.py
from appium import webdriver
class MainClass:
def __init__(self):
self.driver_instance = None
def open_application(self, udid=None):
caps = {
'platformName': 'Android', 'deviceName': Galaxy A7, 'automationName': 'UiAutomator2',
'skipServerInstallation': True, 'appActivity': 'YOUR_APP_START_ACTIVITY', 'noReset': no_reset,
'udid': udid, 'newCommandTimeout': 1200, 'autoGrantPermissions': True,
'appPackage': 'YOUR_APP_PACKAGE_NAME'}
driver = webdriver.Remote(str(appium_server), caps)
self.driver_instance = driver
return driver
MyApplication.py
from MainClass import MainClass
class MyApplication(MainClass)
def __init__(self):
super().__init__()
def open_my_application(udid=None):
self.open_application()
Authenticate.py
from MainClass import MainClass
class Authenticate(MainClass)
def __init__(self):
super().__init__()
def login(self, username, password):
self.driver_instance.find_element_by_xpath("//input[1]").set_text(username)
self.driver_instance.find_element_by_xpath("//input[2]").set_text(password)
self.driver_instance.find_element_by_xpath("//button[text='Submit']").click()
def register(self, username, password, name, phone):
self.driver_instance.find_element_by_xpath("//input[1]").set_text(username)
self.driver_instance.find_element_by_xpath("//input[2]").set_text(password)
self.driver_instance.find_element_by_xpath("//input[3]").set_text(name)
self.driver_instance.find_element_by_xpath("//input[4]").set_text(phone)
Test.py
import MyApplication
import Authenticate
MyApplication().open_my_application(udid="5c1425bd54c88")
Authenticate().login('user12', 'user12-password')
1- 正如你在上面的例子中看到的,首先我们创建 MainClass
并包括我们在这里称为 open_application()
的 creating driver instance 关键字,它将创建实例并存储驱动程序实例变量作为 self.driver_instance
变量。
2- 然后我们创建另一个名为 MyApplication
的 class,它继承自 MainClass
。然后我们定义一个名为 open_my_application()
的函数,它将从 MainClass
调用 open_application()
作为实例(class 对象)。因此 self.driver_instance
将存储为 MainClass
的变量,您可以根据需要创建从 MainClass
继承的任何 class。
3- 我们创建一个名为 Authenticate
的 class 来进行登录和注册。
4- Test.py 最后是一个示例测试文件。
希望这对您有所帮助。
一定要为对象处理创建一个适当的测试框架,这将非常容易更新。有关完整的框架,请参阅此视频-https://youtu。be/cHOs-CmY-M8
我正在自动化一个 android 应用程序并在设置 class 文件中使用功能方法并从该方法返回驱动程序实例。
我的一个页面有一个 class 文件,我在其中调用该功能方法并使用驱动程序实例来定位元素,尽管我无法在其他 class 中使用该驱动程序实例] 文件。最好的方法是什么?
这应该用 OOP 来完成。
您应该定义一个用于创建驱动程序实例的 main class 并在其中定义创建驱动程序实例。然后从主 class 继承其他 classes。
假设我们称它为MainClass
。然后我们应该自动化我们应用程序的两个部分,如 Register
和 Login
。它应该这样实现:(Python)
MainClass.py
from appium import webdriver
class MainClass:
def __init__(self):
self.driver_instance = None
def open_application(self, udid=None):
caps = {
'platformName': 'Android', 'deviceName': Galaxy A7, 'automationName': 'UiAutomator2',
'skipServerInstallation': True, 'appActivity': 'YOUR_APP_START_ACTIVITY', 'noReset': no_reset,
'udid': udid, 'newCommandTimeout': 1200, 'autoGrantPermissions': True,
'appPackage': 'YOUR_APP_PACKAGE_NAME'}
driver = webdriver.Remote(str(appium_server), caps)
self.driver_instance = driver
return driver
MyApplication.py
from MainClass import MainClass
class MyApplication(MainClass)
def __init__(self):
super().__init__()
def open_my_application(udid=None):
self.open_application()
Authenticate.py
from MainClass import MainClass
class Authenticate(MainClass)
def __init__(self):
super().__init__()
def login(self, username, password):
self.driver_instance.find_element_by_xpath("//input[1]").set_text(username)
self.driver_instance.find_element_by_xpath("//input[2]").set_text(password)
self.driver_instance.find_element_by_xpath("//button[text='Submit']").click()
def register(self, username, password, name, phone):
self.driver_instance.find_element_by_xpath("//input[1]").set_text(username)
self.driver_instance.find_element_by_xpath("//input[2]").set_text(password)
self.driver_instance.find_element_by_xpath("//input[3]").set_text(name)
self.driver_instance.find_element_by_xpath("//input[4]").set_text(phone)
Test.py
import MyApplication
import Authenticate
MyApplication().open_my_application(udid="5c1425bd54c88")
Authenticate().login('user12', 'user12-password')
1- 正如你在上面的例子中看到的,首先我们创建 MainClass
并包括我们在这里称为 open_application()
的 creating driver instance 关键字,它将创建实例并存储驱动程序实例变量作为 self.driver_instance
变量。
2- 然后我们创建另一个名为 MyApplication
的 class,它继承自 MainClass
。然后我们定义一个名为 open_my_application()
的函数,它将从 MainClass
调用 open_application()
作为实例(class 对象)。因此 self.driver_instance
将存储为 MainClass
的变量,您可以根据需要创建从 MainClass
继承的任何 class。
3- 我们创建一个名为 Authenticate
的 class 来进行登录和注册。
4- Test.py 最后是一个示例测试文件。
希望这对您有所帮助。
一定要为对象处理创建一个适当的测试框架,这将非常容易更新。有关完整的框架,请参阅此视频-https://youtu。be/cHOs-CmY-M8