Образец сценария Serenity - загрузить файл

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

actor.attemptsTo(Enter.theValue(path).into(Upload));

где путь - это расположение файла, который я пытаюсь загрузить с помощью виджета загрузки браузера. Кому-нибудь когда-либо удавалось выполнять подобные действия, используя шаблон воспроизведения экрана безмятежности.

Это действительно заставляет нас задуматься о том, чтобы отказаться от безмятежности и просто использовать структуру огурца-селена, поскольку я могу легко выполнить это с помощью Upload.sendkeys(path); Буду признателен за любую оказанную помощь. Заранее спасибо.

введите здесь описание изображения

введите здесь описание изображения

ПО ЗАПРОСУ: Шаги листинга:

public class ListingSteps
{
  @Before
  public void set_the_stage() {
    OnStage.setTheStage(new OnlineCast());
  }

  @Given("^(.*) is able to click import products$") public void userIsAbleToClick(String actorName) throws Throwable
  {
    theActorCalled(actorName).wasAbleTo(Start.theApplication());

  }
  @When("^s?he imports a  single item successfully$") public void heImportsASingleItemSuccessfully() throws Throwable
  {
    theActorInTheSpotlight().attemptsTo(Import.spreadsheet());
  }
  @Then("^(.*) are listed on ebay and amazon with all the right information$") public void itemsAreListedOnEbayAndAmazonWithAllTheRightInformation(String actorName, String SKU)
     throws Throwable

{ //в ожидании

  }

Игнорируйте тогда пока, поскольку его работа продолжается.

Класс импорта:

public class Import implements Task
{
  protected String path =
      "C:\\somePathToFile\\populated_excel.xlsx";
  public static Import spreadsheet()
  {
    return instrumented(Import.class);
  }
  @Override public <T extends Actor> void performAs(T actorName)
  {
    actorName.attemptsTo(Click.on(Products.ProductsScreen));
    actorName.attemptsTo(Click.on(Products.Upload));
    actorName.attemptsTo(Enter.theValue(path).into(Browse).thenHit(Keys.RETURN));//this is the line which is giving errors
    actorName.attemptsTo(Click.on(Products.UploadButton));
  }
}

Целевой просмотр

public class Products
{
 public static Target Browse = Target.the("browse file").locatedBy("//input[@type='file']");
}

person PashN    schedule 01.08.2018    source источник
comment
Не могли бы вы опубликовать полный тест, в том числе то, как вы определили поле «Загрузить»?   -  person John Smart    schedule 02.08.2018


Ответы (3)


Вы пробовали удалить эти строки? имяактера.attemptsTo(Click.on(Products.ProductsScreen)); имяактера.attemptsTo(Click.on(Products.Upload));

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

person Rodrigo r    schedule 05.09.2018

Способ, которым мне удалось добиться этой работы, заключался в использовании класса FileToUpload:

import net.thucydides.core.pages.components.FileToUpload;

FileToUpload fileToUpload = new FileToUpload(driver, fileName);    
fileToUpload.fromLocalMachine().to(webElement);
person Alex    schedule 19.10.2018

У меня это работает с простым:

import java.nio.file.*;

Path data = null;
try {
    data = Paths.get(ClassLoader.getSystemResource(file).toURI());
} catch (URISyntaxException ignore) {}
ACTOR.attemptsTo(Upload.theFile(data).to(target));

file - это фактический файл, который существует в вашем пути к классам, в src/test/resources, если у вас есть проект Maven.

target это что-то вроде:

Target.the("Image upload").located(By.xpath("//input[@type='file']"));
person SiKing    schedule 28.04.2021