Есть ли причина, по которой мои переменные экземпляра (self) не сохраняются при переходе между Test Case в Robot? - PullRequest
1 голос
/ 19 апреля 2019

В настоящее время у меня есть Python 3.7.3 с robotframework 3.1.1 и я создал библиотеку Python (MySite.py) следующим образом:

from selenium import webdriver
from collections import namedtuple
from HomePage import *

class Pages(object):
    def __init__(self, handle):
        self._pages = {}
        self._home_window = handle
        pass

    @property
    def home_window(self):
        return self._home_window

    @home_window.setter
    def home_window(self, v):
        self._home_window = v

    @property
    def homePage(self):
        return self._pages['home']

    def add(self, name, page):
        self._pages[name] = page

    def get(self, name):
        return self._pages[name]

    def getPages(self):
        return self._pages

class MySite(object):
    def __init__(self):
        self._driver = None

    @property
    def driver(self):
        return self._driver

    @driver.setter
    def driver(self, v):
        self._driver = v

    def close_all_windows(self):
        # Close all windows
        pages = self.pages.getPages()
        for name, page in pages.items():
            page.close()

    def open_my_page(self):
        self.driver = webdriver.Ie("IEDriverServer_Win32_3.141.0\\IEDriverServer.exe")

        # Define pages
        self.pages = Pages(self.driver.current_window_handle)
        self.pages.add('home', HomePage(self.driver, self.pages))

        # Open browser
        self.driver.get(www.mypage.com)

        # Code to wait to finish loading the page

Когда я создаю скрипт робота, чтобы открывать и закрывать браузер вв одном тестовом примере это работает:

*** Settings ***
Library    MySite.py

*** Test Case ***
Open Browser to mypage.com and close browser
    Open My Page
    Close All Windows

Но когда я создаю сценарий Robot, чтобы открыть браузер в одном тестовом примере, а затем в другом тестовом примере, чтобы закрыть его, я получаю AttributeError: у объекта 'MySite' нетатрибут 'pages':

*** Settings ***
Library    MySite.py

*** Test Case ***
Open Browser to mypage.com
    Open My Page

Close Browser
    Close All Windows

Кажется, что переменные моего экземпляра не сохраняются для второго теста робота.Вы знаете, почему это может быть?Или что я делаю не так?

1 Ответ

1 голос
/ 19 апреля 2019

По умолчанию для каждого теста создается новый экземпляр библиотеки.Необходимо установить область действия так, чтобы экземпляр класса создавался один раз для каждого набора или один раз для каждого запуска теста.

Это упоминается в руководстве пользователя, в разделе под названием Область применения библиотеки тестов.:

Тестовые библиотеки могут управлять созданием новых библиотек с атрибутом класса ROBOT_LIBRARY_SCOPE.Этот атрибут должен быть строкой и может иметь следующие три значения:

TEST CASE Новый экземпляр создается для каждого теста.Возможная установка комплекта и разделение комплекта разделяют еще один экземпляр. Это значение по умолчанию.

TEST SUITE Новый экземпляр создается для каждого набора тестов.Наборы тестов самого низкого уровня, созданные из файлов тестовых наборов и содержащие тестовые наборы, имеют свои собственные экземпляры, а все наборы более высокого уровня получают свои собственные экземпляры для своих возможных установок и разрывов.

GLOBAL Только один экземплярсоздается во время всего выполнения теста и используется всеми тестовыми примерами и наборами тестов.Библиотеки, созданные из модулей, всегда глобальны.

(выделено мной)

Чтобы установить область действия "TEST SUITE", чтобы экземпляр создавался только один раз для всего набора, выначал бы определение вашего класса следующим образом:

class MySite(object):
    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...