Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Upload file with selenide [error: is not an INPUT]

selenide
testng
webdriver
Теги: #<Tag:0x00007fedb8477ae0> #<Tag:0x00007fedb84779a0> #<Tag:0x00007fedb8477860>

(Arina) #1

Доброе время суток!
Запуск следующего кода приводит к

import com.codeborne.selenide.Configuration;
import com.codeborne.selenide.Selenide;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.io.File;
import static com.codeborne.selenide.Selectors.byClassName;
import static com.codeborne.selenide.Selectors.byLinkText;
import static com.codeborne.selenide.Selectors.byText;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.open;

public class Review {
    @Test
    public void Step(){
        $("#app").click();
        Selenide.$(byText("Submit a photo")).click();
        Selenide.$(byText("Add a photo")).click();
        File file = new File("src/test/java/../resources/kiev.jpg");
        Selenide.$(byId("new_photo")).uploadFile(file);
      //  Selenide.$(byText("Add a photo")).uploadFile(new File("kiev.jpg"));
      // $("js-uploader-input-autofocus form-control").uploadFile(file);
   //    $(byClassName("btn btn-default js-general-uploader-pseudo-file-field js-upload-trigger")).uploadFile(file);
        //<a href="#" class="btn btn-default js-general-uploader-pseudo-file-field js-upload-trigger">Add a photo</a>
      // $("#file-upload").uploadFromClasspath("kiev.jpg");
        $("#file-submit").click();

    }
}

К такой ошибке java.lang.IllegalArgumentException: Cannot upload file because Add a photo
10 uploads remaining this period is not an INPUT

Собственно сама кнопка загрузки файла выглядит так:
Add a photo
//*[@id=“new_photo”]/div[1]/a с таким селектром

  1. Что за ошибка?
  2. Неверное объявление загрузки файла?
    Нашла пример
File cv = new File("src/test/resources/cv.pdf");
   $("#cvFileUpload").uploadFile(cv);

но cvFileUpload его же руками не объявляют? О_о


(Lev Yarushin) #2

Элемент должен быть типа input. Скорее всего вы выбрали неверную цель для метода. Поищите на странице
<input type='file'...>


(Arina) #3

Нашла. Спасибо!

$("#app").click();
Selenide.$(byText(“Submit a photo”)).click();
Selenide.$(byText(“Add a photo”)).click();
File file = new File(“src/test/java/…/resources/kiev.jpg”);
$("#file").uploadFile(file);
// $("#file-upload").uploadFromClasspath(“kiev.jpg”);
$("#file").click();

Но странный момент в том, что тест падает, но при этом успевает загрузить картинку

Падает с ошибкой
Element should be visible {#file}
Element: ‘’

Но есть картинка грузится. почему может быть такая ошибка?


(Lev Yarushin) #4

Падает на этой строчке?
Возможно на странице несколько элементов с таким id?
Кликать на элементе не требуется, uploadFile достаточно для загрузки.


(Arina) #5

да. Там.
в таком виде файл загружается

File file = new File(“src/test/java/…/resources/123.jpg”);
$("#file").uploadFile(file);

Спасибо!