将 Appium 驱动程序实例从一个 class 传递到另一个

Pass Appium driver instance from one class to another

我正在自动化一个 android 应用程序并在设置 class 文件中使用功能方法并从该方法返回驱动程序实例。

我的一个页面有一个 class 文件,我在其中调用该功能方法并使用驱动程序实例来定位元素,尽管我无法在其他 class 中使用该驱动程序实例] 文件。最好的方法是什么?

这应该用 OOP 来完成。 您应该定义一个用于创建驱动程序实例的 main class 并在其中定义创建驱动程序实例。然后从主 class 继承其他 classes。 假设我们称它为MainClass。然后我们应该自动化我们应用程序的两个部分,如 RegisterLogin。它应该这样实现:(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