【问题标题】:Python Robot framework Desktop automation winium desktop driver sessionPython Robot 框架 桌面自动化 winium 桌面驱动会话
【发布时间】:2021-07-09 22:57:09
【问题描述】:

我正在使用带有 python 的机器人框架,尝试使用 appium+Winium.Desktop.Driver 进行桌面自动化。

我能够启动应用程序并创建驱动程序会话,但是我无法在其他 python 类中使用相同的驱动程序会话来访问应用程序上的元素。 当我尝试对应用程序执行操作时出现错误。 AttributeError: 'NoneType' object has no attribute 'find_element_by_name'

我的应用程序是 Windows 桌面应用程序(Windows 10)

我在这里遗漏了什么吗?请帮忙。 任何人都可以提出最佳可行的解决方案。

文件:-launchapp.robot

*** Settings ***
Library    ../Resources/DriverFactory.py
Library    ../Resources/SignOnPage.py


*** Test Cases ***
Check whether application is running if not launch the application
    driverfactory
    click on signon button

*** Keywords ***

文件:- DriverFactory.py

from appium import webdriver
import time
from robot.api.deco import keyword

class DriverFactory:
    instance = None

    @staticmethod
    @keyword
    def driverfactory():
        instance = webdriver.Remote(command_executor="http://localhost:9999",
                desired_capabilities={"app": "AbsoultePath_of_My_APP.exe", "args": '-port 345'})
        time.sleep(40)
        return instance

文件:- SignonPage.py

from robot.api.deco import keyword
from DriverFactory import DriverFactory


class SignOnPage:
    @staticmethod
    @keyword
    def click_on_signon_button():
        DriverFactory.instance.find_element_by_name("Sign On").click()

【问题讨论】:

    标签: python python-3.x robotframework


    【解决方案1】:

    我会先说我讨厌机器人框架。我目前正在将我公司过时的机器人框架转换为纯 python。我不知道你的情况,但是在机器人框架上使用 python 可能是有益的,值得深思。

    关于您的问题,我认为您不能使用 click_on_signon_button 方法(机器人脚本中的关键字)的原因是因为您正在创建它们的不同实例。在您的机器人脚本中,您正在从您的 drivefactory 类中启动一个驱动程序,并且您单击登录按钮关键字正在使用它在您的 SignonPage.py 脚本中导入的 drivefactory 实例。

    要解决此问题,我建议将 drivefactory 方法移至您的 SignonPage 类。使 drivefactory 工厂成为类方法。即

    def drivefactory(self):
        self.instance = webdriver.Remote(command_executor="http://localhost:9999",
                desired_capabilities={"app": "AbsoultePath_of_My_APP.exe", "args": '-port 345'})
        time.sleep(40) # this seems like a long sleep
        
    

    还将您的 click_on_signon_button 设为类方法。

    def click_on_signon_button(self):
        self.instance.find_element_by_name("Sign On").click()
    

    这样你就知道你正在使用相同的驱动程序实例。

    我不是最好的机器人框架(并且现在真的没有时间进一步研究)但另一个选择是将驱动程序作为参数传递给您的 SignonPage 类并为该类启动一个驱动程序,或者您可以将驱动程序作为参数传递给 click_on_signon_button 方法。

    def click_on_signon_button(driver):
        driver.find_element_by_name("Sign On").click()
    

    你必须在robotframework中查找传递参数的语法,因为我不知道它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 2019-06-25
      • 2018-02-16
      • 2020-04-05
      • 2019-02-03
      • 2011-12-28
      • 1970-01-01
      • 2013-05-04
      相关资源
      最近更新 更多