Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static ExpectedCondition<List<WebElement>> texts(final List<WebElement> elements , final String... expectedTexts) {
- /*
- вот эти лейзи прокси веб-элементы - они не такие простые)
- они могут меняться)
- ты обратился к elements в начале метода - у тебя одна картинка
- а ниже обратился - список уже поменялся
- https://github.com/SeleniumHQ/selenium/wiki/PageFactory
- http://selenium2advanced.blogspot.com/2013/08/working-with-page-factory-and-webdriver.html
- это придется учесть в коде кондишена)
- */
- return new ExpectedCondition<List<WebElement>>() {
- private String[] copyElements = new String[elements.size()];
- /*
- это мы выполняем единожды - когда вызываем этот кондишен texts(...)
- в assertThat(texts(...))
- а потом будем многократно(в new WebDriverWait(...).until(...))
- вызывать apply - до тех пор пока таймаут не закончится или кондишен не выполнится
- и для всех этих раз - у нас будет copyElements того размера, который мы запомнили на старте
- хотя размер списка мог уже измениться
- проще тут объявить List<String>
- и не инициализировать его
- и советую назвать этот список actualTexts - точнее отражает суть
- */
- public List<WebElement> apply(WebDriver driver) {
- if (elements.size() == expectedTexts.length){
- for(int i = 0; i < elements.size(); i++ ){
- copyElements[i] = elements.get(i).toString();
- }
- } else {
- return null;
- }
- /*
- нам в любом случае надо бы собрать actualTexts
- даже если размеры не равны
- ведь в toString нам интересно увидеть actualTexts
- поэтому - инициализируй список
- и в цикле - при обходе списка elements
- наполняй actualTexts
- в любом случае
- а далее
- сравни размер actualTexts и expectedTexts
- и если они не равны - возвращай нулл
- тогда и в toString будет что рассказать )
- и что важнее - дальше в сравнениях описраемся на собранный список actualTexts
- потому что если снова просить что-то у elements - нам снова могут быть выданы обновленные данные)
- а наш apply - должен проверить состояние списка в некий фиксированный момент
- потому - сначала - фиксируем момент = собираем actualTexts
- а потом - анализируем полученное
- */
- for(int i = 0; i < copyElements.length; i++ ){
- if(!copyElements[i].equals(expectedTexts[i])){
- /*
- этот цикл - в целом верный
- единственное - для сравнения применяй
- не equals
- а contains
- вспомни - для чего мы пишем кондишен и какую проверку нам нужно
- */
- return null;
- }
- }
- return elements;
- }
- public String toString() {
- return String.format("\nExpected texts: %s\n while actual texts is: %s\n", expectedTexts[0],copyElements[0]);
- /*
- подсмотри в https://docs.google.com/document/d/1W_oZ2UkBvDJes5bBoMm4eAhgyJIaQXEvyGJUeq-pfao/edit#bookmark=id.anbgqa4uaym5
- как мы формируем сообщение
- мы пишем - что проверяли + для какой сущности проверяли + ожидания + факт
- и ты так построй фразу
- */
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment