Reputation: 3097
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)
Upvotes: 0
Views: 76
Reputation: 32532
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)
Upvotes: 4