Долгое чтение и публикация в первый раз.
<tbody class="dataRows">
<tr class="readonly feedbackForm" id="readOnlyContainer36" autocomplete="off"></tr>
<tr class="readonly feedbackForm" id="readOnlyContainer3b" autocomplete="off"></tr>
<tr class="readonly feedbackForm" id="readOnlyContainer40" autocomplete="off"></tr>
</tbody>
Работа с Serenity BDD и использование шаблона сценария, но нигде не могу найти четкого объяснения того, как получить строки из HTML таблица с использованием цели.
У меня есть цель для тела таблицы с использованием xpath, но я просто не вижу никаких методов, которые позволили бы мне прочитать количество строк в таблице (там могло бы быть быть ноль или много). Я немного убрал фрагмент кода HTML, каждая из строк таблицы имеет свой идентификатор, который генерируется случайным образом калиткой, и каждая из строк содержит метку, кнопку и флажок.
Текущая задача выглядит примерно так:
package com.vebnet.regressiontest.screenplay.setup.task;
import com.vebnet.regressiontest.screenplay.setup.target.CallTopicsPage;
import net.serenitybdd.screenplay.Actor;
import net.serenitybdd.screenplay.Task;
import net.serenitybdd.screenplay.actions.Click;
import net.serenitybdd.screenplay.actions.Enter;
import net.thucydides.core.annotations.Step;
import java.util.List;
import static net.serenitybdd.screenplay.Tasks.instrumented;
public class AddCallTopicsTask implements Task {
private final List<String> callTopics;
public AddCallTopicsTask(List<String> callTopics) {
this.callTopics = callTopics;
}
public static AddCallTopicsTask with(List<String> callTopics) {
return instrumented(AddCallTopicsTask.class, callTopics);
}
@Override
@Step("{0} adds a list of new call topics")
public <T extends Actor> void performAs(T actor) {
//need to check if there is any values already in the table and delete if there is
for (String callTopic : callTopics) {
actor.attemptsTo(
Enter.theValue(callTopic).into(CallTopicsPage.NAME_TEXT_FIELD),
Click.on(CallTopicsPage.ADD_BUTTON)
);
}
}
}
И файл Targets / Page Object:
package com.vebnet.regressiontest.screenplay.setup.target;
import net.serenitybdd.screenplay.targets.Target;
import org.openqa.selenium.By;
public class CallTopicsPage {
public static final Target NAME_TEXT_FIELD = Target.the("the name input text field")
.located(By.xpath("//div[contains(@class, 'dijitInputContainer')]/child::input"));
public static final Target ADD_BUTTON = Target.the("the add new call topic button")
.located(By.xpath("//span[text()='Add']/parent::button"));
public static final Target CALL_TOPIC_NAME_TABLE = Target.the( "rows in the editable call topic name table")
.located(By.xpath("//tbody[@class='dataRows']"));
Если я могу понять, как получить данные из таблицы в память, тогда я должен с этого момента все будет в порядке.
Я еще немного копался и играл с xpaths, и мне даже не нужно получать данные от этой цели, кажется, мне просто нужно знать номер элементов строки в таблице.