Найти - Пользователи
Полная версия: Как подключиться к уже запущенному браузеру на маке?
Начало » Python для новичков » Как подключиться к уже запущенному браузеру на маке?
1
Andriuha
Привет всем!
Пробую автоматизировать десктопную аппликацию на 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
Andriuha
Здесь искали?
Andriuha
Большое спасибо, но пока безрезультатно и уже не знаю куда копать.

 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')
Andriuha
Жаль конечно что не получилось подключиться с помощью 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()


Всем счастливого Нового Года!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB