Не удается получить значение атрибута с помощью WebElement.getAttribute(“Value.Value”) и WebElement.getAttribute(“LegacyValue”) с использованием WinAppDriver

Вопросы и ответы

В настоящее время я занимаюсь автоматизацией UWP приложения с использованием WinAppDriver/Appium и Selenium WebDriver. У меня возникла проблема с получением атрибута значения для текстового поля. Я пытался получить Legacy Value, а также Value.Value, но они возвращают null.

WinAppDriverLog:

[4ac9e28c][WindowsDriver@c6ac] Совпало '/session/4ac9e28c-e3c9-4a17-bd9a-d1657e8b3c01/element/42.591224.4.5.1.3785/attribute/LegacyValue' с командой 'getAttribute'
[4ac9e28c][WindowsDriver@c6ac] Прокси [GET /session/4ac9e28c-e3c9-4a17-bd9a-d1657e8b3c01/element/42.591224.4.5.1.3785/attribute/LegacyValue] к [GET http://127.0.0.1:4724/wd/hub/session/627D1077-ED95-4D32-BB9B-B1473EEF5817/element/42.591224.4.5.1.3785/attribute/LegacyValue] без тела
[4ac9e28c][WindowsDriver@c6ac] ==========================================
GET /wd/hub/session/627D1077-ED95-4D32-BB9B-B1473EEF5817/element/42.591224.4.5.1.3785/attribute/LegacyValue HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, compress, deflate, br
Connection: keep-alive
Content-Type: application/json; charset=utf-8
Host: 127.0.0.1:4724
User-Agent: appium
[4ac9e28c][WindowsDriver@c6ac] HTTP/1.1 200 OK
Content-Length: 76
Content-Type: application/json
{"sessionId":"627D1077-ED95-4D32-BB9B-B1473EEF5817","status":0,"value":null}

TestCode:

public void verifyValueByName(String locator, String expected) {

    WebElement text = WinDriver.driver.findElementByName(locator);
    Log.info("Проверка текста " + expected + "....");
    Assert.assertEquals(text.getAttribute("LegacyValue"), expected); //Legacy|Accessible.Value
    Log.info("ОЖИДАЕМОЕ ЗНАЧЕНИЕ: " + expected + " ФАКТИЧЕСКОЕ ЗНАЧЕНИЕ: " + text.getAttribute("Value.Value"));

}

Код WinDriver

public class WinDriver {

    public static WindowsDriver<RemoteWebElement> driver = null;

    public static void start(String appPath)
    {
        Log.info("Настройка");
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("automationName", "Windows");
        capabilities.setCapability("app", appPath);
        capabilities.setCapability("platformName", "Windows");
        capabilities.setCapability("deviceName", "WindowsMachine");
        try {
            driver = new WindowsDriver<>(new URL("http://127.0.0.1:4723"), capabilities);
        } catch (MalformedURLException e) {
            throw new RuntimeException(e);
        }
    }

Меня это запутывает, так как я пробовал получить “LegacyName” (как было предложено здесь>> https://github.com/microsoft/WinAppDriver/blob/a6f3d7bca447e0c13a33f76454600c1fe737ab10/Tests/WebDriverAPI/ElementAttribute.cs#L46%5C%5C\>и это сработало, но, к сожалению, “LegacyValue” или “Value.Value” не работают.

Спасибо всем заранее!!!

Я пытался получить значение, используя WebElement.getAttribute(“Value.Value”) и WebElement.getAttribute(“LegacyValue”). Я ожидал получить значение с помощью getAttribute.

Ответ

Для решения проблемы с получением атрибута значения текстового поля в UWP приложении с использованием WinAppDriver и Appium, вам следует обратить внимание на несколько важных моментов, которые могут помочь разобраться с вашей ситуацией.

1. Проверка доступности элемента

Прежде всего, убедитесь, что вы корректно находите элемент. Проверьте с помощью метода isDisplayed(), доступен ли элемент для взаимодействия:

WebElement text = WinDriver.driver.findElementByName(locator);
if (text.isDisplayed()) {
    Log.info("Элемент видим.");
} else {
    Log.error("Элемент не видим.");
}

2. Использование правильных атрибутов

Как вы уже отметили, атрибут LegacyValue или Value.Value могут не возвращать значение. Вместо этого попробуйте использовать другие доступные атрибуты, такие как Name или AutomationId, в зависимости от вашей конкретной реализации приложения.

Попробуйте следующий код:

String actualValue = text.getAttribute("Name"); // or another attribute that might hold the text
Log.info("Размещенное значение: " + actualValue);
Assert.assertEquals(actualValue, expected);

3. Обновление WinAppDriver

Убедитесь, что у вас установлена последняя версия WinAppDriver, так как иногда старые версии могут иметь баги, влияющие на работу с атрибутами.

4. Проверка WinAppDriver логов

Вы уже привели часть логов, где показано, что LegacyValue возвращает null. Это может указывать на то, что элемент, с которым вы работаете, может не поддерживать этот атрибут. Попробуйте вызывать методы, которые позволяют проверить доступные атрибуты или получать текст напрямую:

String elementText = text.getText();  // Попробуйте получить текст напрямую
Log.info("Полученный текст: " + elementText);
Assert.assertEquals(elementText, expected);

5. Использование различных методов

Если ничего из вышеперечисленного не сработало, попробуйте использовать методы, которые могут дать вам больше информации о элементе, например, getCssValue, если это применимо.

Пример кода

Вот пример функции, которая всё объединяет:

public void verifyValueByName(String locator, String expected) {
    WebElement text = WinDriver.driver.findElementByName(locator);

    if (!text.isDisplayed()) {
        Log.error("Элемент не видим.");
        return;
    }

    String actualValue = text.getAttribute("Value.Value"); // Попробуйте другие атрибуты, если этот не работает
    if (actualValue == null) {
        actualValue = text.getAttribute("LegacyValue"); 
    }

    // Альтернативное получение текста
    if (actualValue == null) {
        actualValue = text.getText();
    }

    Log.info("Ожидаемое значение: " + expected + ", Полученное значение: " + actualValue);
    Assert.assertEquals(actualValue, expected); 
}

Заключение

Следуя приведённым рекомендациям, вы должны быть в состоянии устранить проблему с получением значения атрибута или же найти альтернативный подход к получению текста из текстового поля. Убедитесь, что вы тестируете свой код с последней версией инструментов, и при необходимости рассматривайте обновление вашего UWP приложения, так как это может повлиять на доступные атрибуты для элементов.

Оцените материал
Добавить комментарий

Капча загружается...