как применить метод к переменной, хранящейся в другом файле в python? - PullRequest
0 голосов
/ 01 августа 2020

У меня есть два файла: test_e2e.py и CheckOutPage.py . В CheckOutPage.py есть метод ' getProducts () ', который возвращает список всех элементов, имеющих конкретный xpath. Этот список возвращается в переменную ' products ', которая находится в test_e2epage.py . Теперь я просматриваю список ' products ' и пытаюсь применить метод ' getProductName () ', который присутствует CheckOutPage.py , но я не может этого сделать. Код ниже.

CheckOutPage.py-

from selenium.webdriver.common.by import By


class CheckOutPage:

    def __init__(self, driver):  #Constructor
        self.driver = driver

    products = (By.XPATH, "//div[@class='card h-100']")
    productName = (By.XPATH, "div/h4/a")

    def getProducts(self):
        return self.driver.find_elements(*CheckOutPage.products)

    def getProductName(self):
        return self.driver.find_element(*CheckOutPage.productName)

test_e2e.py-

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# @pytest.mark.usefixtures("setup")
from pageObjects.CheckOutPage import CheckOutPage
from pageObjects.HomePage import HomePage
from utilities.BaseClass import BaseClass


class TestOne(BaseClass):

    def test_e2e(self):

        # Select only Blackberry.
        checkOutPage = CheckOutPage(self.driver)
        products = checkOutPage.getProducts()
        for product in products:
            #productName = product.find_element_by_xpath("div/h4/a").text
            Name = product.checkOutPage.getProductName()
            if Name == "Blackberry":
                product.checkOutPage.selectProduct().click()
                break

Код не работает в третьей строке l oop в test_e2e.py. Ошибка: « AttributeError: объект 'webElement' не имеет атрибута 'checkoutPage' ». Пожалуйста, помогите мне, ребята. Я застрял.

Ответы [ 2 ]

0 голосов
/ 01 августа 2020
Name = product.checkOutPage.getProductName()

Эта строка в l oop пытается получить доступ к атрибуту checkOutPage из объекта product, который является объектом Selenium WebElement , а не объектом CheckOutPage. У него нет такого атрибута.

0 голосов
/ 01 августа 2020

Вы просматриваете веб-элементы, возвращаемые CheckOutPage, но это не методы, возвращаемые CheckOutPage. Вот как бы я это написал

class TestOne(BaseClass):

    def test_e2e(self):

        # Select only Blackberry.
        checkOutPage = CheckOutPage(self.driver)
        products = checkOutPage.getProducts()
        for product in products:
            #productName = product.find_element_by_xpath("div/h4/a").text
            Name = checkOutPage.getProductName(product)
            if Name == "Blackberry":
                product.checkOutPage.selectProduct().click()
                break

class CheckOutPage:

    def __init__(self, driver):  #Constructor
        self.driver = driver

    products = (By.XPATH, "//div[@class='card h-100']")
    productName = (By.XPATH, "div/h4/a")

    def getProducts(self):
        return self.driver.find_elements(*CheckOutPage.products)

    def getProductName(self, product):
        return self.driver.find_element(*CheckOutPage.productName)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...