Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 21, 2021 17:55:29

Andriuha
Зарегистрирован: 2021-12-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключиться к уже запущенному браузеру на маке?

Привет всем!
Пробую автоматизировать десктопную аппликацию на Windows и мак'е. Основная проблема что с десктопной аппликации при подключении пользователя запускается браузер в котором надо ввести данные пользователя и после этого опять возврощаемся в десктопную аппликацию. На Windows эту проблему решил с помощью такого кода:

    
desktopCapabilities = {}
desktopCapabilities["app"] = "Root"
web_desktop = webdriver.Remote("http://127.0.0.1:4723", desktopCapabilities)
web_desktop.window_handles
win = web_desktop.find_element_by_class_name('MozillaWindowClass')
win_handle1 = win.get_attribute("NativeWindowHandle")
win_handle = format(int(win_handle1), 'x')
desired_caps = {}
desired_caps["appTopLevelWindow"] = win_handle
driver = webdriver.Remote("http://127.0.0.1:4723", desired_caps)
driver.switch_to.window(win_handle)

и после этого кода мы просто обращаемся через driver.find_element и получаем нам нужный элемент в этом браузере. На мак'е по видимому отличаются свойства Capabilities, либо мак вообще неимеет подобных свойств. Пока немогу найти где нибудь инфу по этому поводу, либо может есть какой нибудь другой способ подключиться к браузеру. Может кто сталкивался с подобной проблемой, был бы признателен за помощь?

Отредактировано FishHook (Дек. 22, 2021 11:31:41)

Офлайн

#2 Дек. 22, 2021 11:51:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как подключиться к уже запущенному браузеру на маке?

Andriuha
Здесь искали?



Офлайн

#3 Дек. 28, 2021 20:10:33

Andriuha
Зарегистрирован: 2021-12-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключиться к уже запущенному браузеру на маке?

Большое спасибо, но пока безрезультатно и уже не знаю куда копать.

 import time
import pytest
from appium import webdriver
def generate_capabilities():   
    desktop_browser_capabilities = {
        'platformName': 'Mac',
    }
    return [desktop_browser_capabilities]
@pytest.fixture(params=generate_capabilities())
def driver(request):
    driver = webdriver.Remote('http://localhost:4723/wd/hub', request.param)
    yield driver
    driver.quit()
def test_signin_page(driver):
    # в это время кликаю на броузер с открытой нужной страницей имитируя что браузер был открыт из 
    # апликации, чтобы он был активный 
    time.sleep(10)
    driver.window_handles
    win = driver.find_element_by_xpath(r"/AXApplication[@AXTitle='Safari']/AXWindow[@AXTitle='Sign in - Google Accounts'")
    print(f'\nBrowser name: {driver.current_url}')  # здесь печатает: Safari
    win_handle1 = win.get_attribute("NativeWindowHandle")
    desired_caps = {'platformName': 'Mac'}
    desired_caps["appTopLevelWindow"] = win_handle1
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    driver.switch_to.window(win_handle1)
# этого элемента уже не находит
    driver.find_element_by_name('Email or phone')

Офлайн

#4 Дек. 31, 2021 10:45:15

Andriuha
Зарегистрирован: 2021-12-21
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как подключиться к уже запущенному браузеру на маке?

Жаль конечно что не получилось подключиться с помощью Selenium'а, но получилось это сделать с помощью AppleScript'а. Может кому пригодится.

  
import subprocess
def fill_form():
    cmd = """
                to submitForm(elementId, elementNum, inputValue)
                   tell application "Safari"
                      tell current tab of window 1
                         do JavaScript "document.getElementById('" & elementId & "').value='" & inputValue & "'; document.forms[" & elementNum & "].submit()"
                         delay 2
                      end tell
                   end tell
                end submitForm
            submitForm("identifier_field", 0, "user_email_or_name")
            submitForm("password_field", 0, "user_password")
            """
    result = subprocess.run(['osascript', '-e', cmd], capture_output=True)
    return result.stdout
fill_form()


Всем счастливого Нового Года!

Отредактировано Andriuha (Дек. 31, 2021 10:47:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version