Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public WebElement $(String cssSelector) {
- return assertThat(visibilityOfElementLocated(By.cssSelector(cssSelector)));
- }
- /*
- я бы в реализации - заюзала
- return $(By.cssSelector(cssSelector));
- не сказать - что мега важно
- но - проще)
- и более DRY
- советую
- */
- *********************
- public class CustomConditions {
- private static String actualText;
- public static ExpectedCondition<WebElement> nthProxyElementHasText(final By locator
- , final int index
- , final String expectedText) {
- return elementExceptionsCatcher(new ExpectedCondition<WebElement>() {
- private WebElement element;
- public WebElement apply(WebDriver driver) {
- ...
- actualText = element.getText();
- ....
- }
- public String toString() {
- ....
- actualText
- }
- /*
- Отличная грубая ошибка)
- запомни ее и никогда так не делай
- в CustomConditions - реализован кондишен nthProxyElementHasText
- которы по сути - метод, возвращающий новый объект ExpectedCondition<WebElement>
- в рамках которого мы реализуем проверку
- и оперируем в проверке actualText-ом
- т е - по сути - это собственность объекта-кондишена
- но никак не класса CustomConditions в целом
- это как иметь общий кошелек на жильцов всего подъезда)
- я бы не согласилась)
- каких глюков можно наловить с помощью таких ошибок
- пример
- используем этот actualText в паре кондишенов
- или в одном кондишене,
- но тесты запускаем параллельно
- если будут выполлняться проверки для нескольких таких объектов-кондишенов
- и одна из проверок упадет - не факт - что в описании ошибки будет все ок)
- а еще будет прикольно
- если
- в одной проверке - мы выполнили actualText = element.getText();
- затем - по времени - в другой проверке успел выполниться actualText = element.getText();
- и только потом в первой дошел ход до анализа actualText
- то получим бред)
- причем - странно и не стабильно проявляющийся бред
- понять по проявлениям - что не так и как это пофиксить - поверь, будет не просто)
- потому
- объявляй переменные - ровно там где нужно
- не стремись вынести их повыше по структуре
- если что-то нужно на уровне метода - объявляй в методе
- если что-то - на уровне класса - объявляй в этом классе, а не где-то выше по структуре
- конечно - при таких рассуждениях - учитывай не только сиюминутные обстоятельства)
- например, объявлять пейджа - все же лучше на уровне тест-класса
- а не в тест-методе, даже если он единственный
- т к пейдж - все же собственность и инструмент для всего тест-класса в целом
- да и тест-класс - потенциально может развиться
- но стремиться выпихивать что-то максимально высоко / глубоко - не, не стоит)
- особенно - когда вот мы оперировали объектом
- и тут бац - свойства объекта выносим на уровень свойств класса,
- причем не класса объекта, а объемлющего класса
- вопрос важный
- надо хорошо осознавать - почему или для чего переменную вынес туда-то
- ответ всегда должен быть)
- */
- *********************
- nthProxyElementHasText
- /*
- уже никаких Proxy у нас нету
- проверь код
- */
Advertisement
Add Comment
Please, Sign In to add comment