简体   繁体   中英

Python - Missing 1 argument even though I'm providing it

I'm providing the argument and still I'm getting the error. I even tried providing it as a string.

Error:

C:\anaconda3\python.exe C:/Test/browser_automation/app.py
Enter the author you'd like quotes from: test
test
Traceback (most recent call last):
  File "C:/Test/browser_automation/app.py", line 14, in <module>
    page.select_author(author)
TypeError: select_author() missing 1 required positional argument: 'author_name'

Process finished with exit code 1

app.py

from selenium import webdriver

from pages.quotes_page import QuotesPage

chrome = webdriver.Chrome(executable_path="c:\\Test\\chromedriver.exe")
chrome.get('http://quotes.toscrape.com/search.aspx')
page = QuotesPage(chrome)


author = input("Enter the author you'd like quotes from: ")
print(author)
page.select_author(author) ## Still reports error
#page.select_author('author')  ## Tried it as a string as well and it still reports error.

quotes_page.py partial content:

    @property
    def select_author(self, author_name: str):
        self.author_dropdown.select_by_visible_text(author_name)

quotes_page.py full file:

from typing import List
from selenium.webdriver.support.ui import Select

from locators.quotes_page_locators import QuotesPageLocators
from parsers.quote import QuoteParser


class QuotesPage:
    def __init__(self, browser):
        self.soup = browser

    @property
    def quotes(self) -> List[QuoteParser]:
        # locator = QuotesPageLocators.QUOTE
        # quote_tags = self.browser.select(locator)
        # return [QuoteParser(e) for e in quote_tags]
        # return [QuoteParser(e) for e in self.soup.select(QuotesPageLocators.QUOTE)]
        return [
            QuoteParser(e) for e in self.browser.find_elements_by_css_selector(
                QuotesPageLocators.QUOTE
            )
        ]

    @property
    def author_dropdown(self) -> Select:
        element = self.browser.find_elements_by_css_selector(
            QuotesPageLocators.AUTHOR_DROPDOWN
        )
        print(element)
        return Select(element)

    @property
    def select_author(self, author_name: str):
        self.author_dropdown.select_by_visible_text(author_name)

Property ( @property ) methods can't accept any arguments

So, change your property from

@property
def select_author(self, author_name: str):
   self.author_dropdown.select_by_visible_text(author_name)

to

def select_author(self, author_name: str):
    self.author_dropdown.select_by_visible_text(author_name)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM