как указать порядок срабатывания классов
у меня есть два класса, и при запуске кода срабатывает сначала второй класс а потом первый. Как мне упорядочить из работу (сначала первый потом второй)?
import time
from selenium import webdriver
from webdriver_manager import driver
from webdriver_manager.chrome import ChromeDriverManager
import pyautogui
class SBMS_start():
def open_service(self):
self.driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
self.driver.get("ссылка сайта")
self.driver.maximize_window()
time.sleep(1)
def auth(self):
driver = self.driver
time.sleep(1)
username_textbox = driver.find_element_by_name("user")
username_textbox.send_keys("логин")
time.sleep(1)
password = driver.find_element_by_name("password")
password.send_keys("пароль")
time.sleep(1)
button1 = driver.find_element_by_xpath('//*[@id="SSW_WORKFRAMES_CONTAINER"]/div/div/div/div[5]/button')
button1.click() #ENTER
def registration_client(self):
driver = self.driver
time.sleep(1)
registartion = driver.find_element_by_xpath('//*[@id="SHELL_MENU.ITEM0040"]/a')
registartion.click()
time.sleep(1)
add_abon = driver.find_element_by_xpath('//*[@id="menu-CLIR.ITEM0020"]')
add_abon.click()
class move_mouse_for_search():
pyautogui.moveTo(331, 296,duration=0.5)
pyautogui.click(331,296,duration=0.5)
pyautogui.write("777772194")
checkbox = SBMS_start()
checkbox.open_service()
checkbox.auth()
checkbox.registration_client()
move = move_mouse_for_search()
логика работает кроме проблемы проблемы с порядком классов. Где мой косяк?
Ответы (3 шт):
Сначала вызвать второй клас потом первый:
move = move_mouse_for_search()
checkbox = SBMS_start()
checkbox.open_service()
checkbox.auth()
checkbox.registration_client()
но предполагаю, это вызовет ошибку, так как второй класс исспользует элементы созданные первым, следовательно, перемещаем строку move=... на одну ниже, или на две, или на три
Это происходит потому, что вы функции pyautogui положили в классовую область видимости. Эти три строки выполняются даже если вы не будете создавать экземпляр класса. Решение простое - использовать их (эти 3 строки) в методе инициализации (__init__)
class move_mouse_for_search:
def __init__(self):
pyautogui.moveTo(331, 296,duration=0.5)
pyautogui.click(331,296,duration=0.5)
pyautogui.write("777772194")
checkbox = SBMS_start()
checkbox.open_service()
checkbox.auth()
checkbox.registration_client()
move_mouse_for_search()
А вообще не понятно для чего вам тут целый класс, если можно просто функцию создать и вызвать.
def move_mouse_for_search():
pyautogui.moveTo(331, 296,duration=0.5)
pyautogui.click(331,296,duration=0.5)
pyautogui.write("777772194")
checkbox = SBMS_start()
checkbox.open_service()
checkbox.auth()
checkbox.registration_client()
move_mouse_for_search()
и так пошаманил с бубном. В втором классе метод обернул функцией
class move_mouse_for_search:
def move_mouse():
pyautogui.moveTo(331, 296,duration=0.5)
pyautogui.click(331,296,duration=0.5)
pyautogui.write("777772194")
а в конце когда начал вызвать классы и их функции поставил таймер между 1 и 2 классами и их функциями
checkbox = SBMS_start()
checkbox.open_service()
checkbox.auth()
time.sleep(2) # таймер для ожидания
ms_move = mouse()
mouse.move_mouse()
это мой вариант решения проблемы! Но выше я отметил в качестве правильного вариант коллеги по цеху потому что тот вариант более удобен и прост