Selenide. Кнопка "Загрузить файл" без input, сам input в div-e с атрибутом display:none


Запускаю тесты в тестконтейнере. Имею следующую проблему.

Необходимо реализовать тест, который нажимает кнопку, выбирает файл в формате docx и загружает его на сайт.

Сама кнопка находится по селектору doc_upload-btn следовательно при попытке использовать .uploadFile Selenide справедливо требует input.
Сам input находится ниже в div-e с атрибутом display:none и при попытке обратиться к нему, получаем ошибку, что Element should be visible и Actual value: visible:false

Вопрос звучит так: как поменять значение элементу с display:none на display:inline?

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('//id of element').setAttribute('attr', '10')");

попробуйте js-ом изменить атрибут элемента

1 лайк

В моём случае помогла такая конструкция:

RemoteWebDriver driver = chrome.getWebDriver();
JavascriptExecutor js;
js = (JavascriptExecutor) driver;
WebElement uploadElement = driver.findElement(By.xpath("/html/body/div/div/div[2]/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/input"));
js.executeScript("arguments[0].removeAttribute('style')", uploadElement);

Немного не по теме, но селектор у вас, мягко говоря, неудачный, нестабильный. Я бы рекомендовал оптимизировать его, сделать покороче.