Я создаю фреймворк, используя Selenium и Python.
Моя структура, управляемая данными, состоит из 2 файлов:
1-й файл - Setup.py
содержит класс Actions()
которые состоят из всех возможных функций, которые я буду использовать
в моих рамках, например:
def __init__():
def setup():
def tearDown():
def click():
def sendKeys():
Функции
My click
и sendKeys
имеют минимум 2 параметра.
Они берут первый параметр такой у нас :id_for_element
,
xp_for_element
или css_for_element
, нарезая слова до
они получают первые два символа и находят элемент либо
id, xp или любой другой способ. Затем они используют второй параметр для
указать значение элемента и 3-й параметр для указания
значение для функции send_keys()
. Все эти функции
сейчас работают, но пока что значение жестко прописано в моем тестовом файле.
setup.py file
:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
class Actions(object):
def __init__(self,driver=None):
if driver != None:
self.driver = driver
def setUp(self, browserName):
if browserName == 'Chrome':
self.driver = webdriver.Chrome()
self.driver.delete_all_cookies()
self.driver.maximize_window()
elif browserName == 'Safari':
self.driver = webdriver.Safari()
self.driver.delete_all_cookies()
self.driver.maximize_window()
elif browserName == 'Firefox':
self.driver = webdriver.Firefox()
self.driver.delete_all_cookies()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
def tearDown(self, browserName):
self.driver.quit()
def webPage(self):
self.driver.get('https://www.yahoo.com')
def click(self, elemLocator, elemValue):
elp = elemLocator
flp = slice(0,2)
if elp[flp] == 'id':#return by ID
try:
self.driver.find_element_by_id(elemValue).click()
except:
pass
elif elp[flp] == 'xp':#return by XPATH
try:
self.driver.find_element_by_xpath(elemValue).click()
except:
pass
def sendKeys(self, elemLocator, elemValue, messageValue):
elp = elemLocator
flp = slice(0,2)
if elp[flp] == 'id':#return by ID
try:
self.driver.find_element_by_id(elemValue).click()
self.driver.find_element_by_id(elemValue).clear()
self.driver.find_element_by_id(elemValue).send_keys(messageValue)
except:
pass
elif elp[flp] == 'xp':#return by XPATH
try:
self.driver.find_element_by_xpath(elemValue).click()
self.driver.find_element_by_xpath(elemValue).clear()
self.driver.find_element_by_xpath(elemValue).send_keys(messageValue)
except:
pass
#test.py file
from Setup import Actions
class test_case_1: #find element by id
action = Actions(object)
action.setUp('Chrome')
action.webPage()
action.click('id_of_yahoo_logo', 'uh-logo')
action.tearDown('Chrome')
class test_case_2: #find element by xpath
action = Actions(object)
action.setUp('Chrome')
action.webPage()
action.click('xp_of signIn_button', '//*[@id="uh-signin"]')
action.tearDown('Chrome')
class test_case_3: #login to email
action = Actions(object)
action.setUp('Chrome')
action.webPage()
action.click('xp_of signIn_button', '//*[@id="uh-signin"]')
action.sendKeys('id_username_login_inp_field','login-username','deniska')
action.click('id_of submit_button', 'login-signin')
action.tearDown('Chrome')
Вместо этого я пытаюсь передать значение для параметров из другого
файл в соответствии с рекомендациями по тестированию на основе данных
фреймворк. Мой следующий шаг - создать файл data.json
, который
Я буду использовать, чтобы отобразить все элементы DOM в следующем
формат: "id_login_button": "некоторое значение id", "xp_input_field": "некоторые
xp value "и т.д. Может кто-нибудь, пожалуйста, помогите разобраться
Как реализовать эту технику?