宁静剧本模式-上传文件

时间:2018-08-01 07:53:02

标签: java serenity-bdd

我们正在尝试使用黄瓜宁静框架进行端到端测试。我是相当新的技术,下面的这段简单代码让我感到厌倦。

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

其中path是我尝试使用浏览器的上载小部件上载的文件的位置。任何人都曾经设法使用宁静的屏幕播放模式来执行类似的操作。

这确实使我们想到放弃宁静,只使用黄瓜硒框架,因为我可以使用Upload.sendkeys(path)轻松地执行此操作; 任何帮助深表感谢。预先感谢。

enter image description here

enter image description here

应要求提供:列出步骤:

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']");
}

3 个答案:

答案 0 :(得分:1)

您尝试删除这些行吗? actorName.attemptsTo(Click.on(Products.ProductsScreen)); actorName.attemptsTo(Click.on(Products.Upload));

您无需打开上传文件组件,只需将文件路径直接写入输入文件元素并执行提交即可。

答案 1 :(得分:0)

我设法完成此工作的方法是使用FileToUpload类:

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

FileToUpload fileToUpload = new FileToUpload(driver, fileName);    
fileToUpload.fromLocalMachine().to(webElement);

答案 2 :(得分:0)

我用一个简单的方法完成了这个工作:

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 是存在于您的类路径中的实际文件,如果您有一个 Maven 项目,则位于 src/test/resources 中。

target 类似于:

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