Я автоматизирую пользовательский интерфейс, используя PlayWright и Java. У меня есть окно поиска в iFrame. Когда я ввожу в него текст, я получаю подсказку: Найдите <number_entered> по. Однако, когда я ввожу номер с помощью .fill() или .type() PlayWright, пользовательский интерфейс не идентифицирует введенный текст и отображает сообщение: Найдите «» по (см. снимок экрана ниже), подразумевая, что пользовательский интерфейс считает, что текст не введен.
Когда я ввожу тот же текст вручную, он работает нормально. Пользовательский интерфейс идентифицирует введенный текст.
Код:
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setHandleSIGINT(false));
Page page = browser.newPage();
FrameLocator frame = page.frameLocator("#iFrameID");
Locator searchBox = frame.locator("#searchBox");
searchBox.click();
searchBox.fill ("454545487");
Locator searchIcon = frame.locator(".searchContainer");
searchIcon.click()
Какой там пользовательский интерфейс? Можете ли вы попробовать размыть и сфокусировать элемент, чтобы увидеть, нужно ли ему обновить определенное событие? Возможно, отправьте onchange или oninput после fill().
Попробуйте использовать:
await searchBox.pressSequentially('454545487')
Этот метод будет генерировать все необходимые события клавиатуры со всеми событиями нажатия клавиш, нажатия клавиш и нажатия клавиш. Вы даже можете указать дополнительную задержку между нажатиями клавиш, чтобы имитировать поведение реального пользователя.
Я попробовал .press() и . pressSequentially() оба. Однако введенные данные по-прежнему не идентифицируются пользовательским интерфейсом. Благодаря Selenium пользовательский интерфейс может идентифицировать введенные данные.
Используете ли вы селектор «#searchBox» в селене?
Ответ Вишала помог решить проблему. Судя по всему, проблема заключалась в том, что PlayWright очень быстро печатал для моего приложения. Замедление его с помощью приведенного ниже кода помогло: searchBox.pressSequentially('454545487', new Locator.PressSequentiallyOptions().setDelay(400));
Java != JavaScript. Поделитесь, пожалуйста, минимально воспроизводимым примером, включая автоматизируемый сайт.