Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Странно....
- в предыдущей версии - ты давала линку на
- https://bitbucket.org/iakovenm/seleniumproject
- а сейчас - на
- https://bitbucket.org/iakovenm/todomvctest/src/fb2ba0decac030a7376e2facebfb768867e36a63?at=master
- /*
- обрати внимание на pom.xml
- мы уже работаем с чистым селениумом
- нам не нужно подключенного в pom - selenide
- таким образом - чтобы не портить предыдущие селенидовские задания - лучше реализовывать эти работы
- в другом проекте
- в следующий раз - приведи в порядок pom
- не подключай лишнего и не подключай selenide - теперь это тоже лишнее
- также не вижу смысла держать в pom и коде - все что касается аллюра
- этого не требуется в задании
- и если не используешь - советую убрать
- цель - получить как можно более полезный код не содержащий лишнего
- чтобы разобраться - что конкретно нужно для реализации именно этой задачи
- */
- ***********************
- public class BaseTest {
- protected static WebDriver driver;
- @BeforeClass
- public static void setup() {
- Configuration.browser = System.getProperty("driver.browser");
- driver = new ChromeDriver();
- }
- /*
- посмотри - что такое Configuration.browser
- это селенидовские настройки
- мы ничего селенидовского подключать и использовать не будем
- работаем с селениумом
- тем более - ниже прописали явно - открываем хром драйвер )
- */
- @After
- public void tearDown() throws IOException {
- screenshot();
- driver.quit();
- }
- @Attachment(type = "image/png")
- public byte[] screenshot() throws IOException {
- File screenshot = Screenshots.takeScreenShotAsFile();
- return Files.toByteArray(screenshot);
- }
- /*
- возню со скриншотами я бы убрала
- из соображений - описанных выше
- */
- *********************************************
- public class GoogleSearchTest extends BaseTest {
- public static ExpectedCondition<Boolean> sizeOf(final By elementsLocator, final int expectedSize) {
- /*
- в целом все верно реализовала
- не забудь еще реализовать toString() метод для этого кондишена
- в notes (см предыдущее задание)
- есть пример
- такой метод нам нужен - т к если ждущая проверка падает -
- то выдается сообщение
- в которое входит и выражение из toString() кондишена
- и очень удобно - если оно помогает понять - в чем тут дело
- это сообщение легко увидеть - в тест-методе вызови проверку этого кондишена
- которая гарантированно не пройдет
- тест упадет - и это сообщение будет выведено - как часть сообщения об ошибке
- поскольку кондишен - вещь универсальная
- давай разместим его в отдельном классе CustomConditions
- а тут - в тест-методе - будем только использовать
- на самом деле есть и стандартный селениумский кондишен, который
- делает то же
- https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html
- вот этот numberOfElementsToBe
- но у нас цель - поучиться писать кондишены
- потому - мы написали свой и его будем использовать
- а в реальных проектах - разумнее в таких обчтоятельствах использовать уже существующие стандартные кондишены
- и только если каких-то не хватает - их дореализовывать
- */
- @Test
- public void testSearchAndFollowLink() {
- open("http://google.com/ncr");
- search("Selenium automates browsers");
- assertCountResults(10);
- assertNthResult(0, "Selenium automates browsers");
- followNthResult(0);
- assertPageisLoaded("http://www.seleniumhq.org/");
- /*
- раз мы проверили урл - нам нечего более уточнять
- и так - точнее некуда)
- в селенидовской версии - до проверки урла (мы ее делали не ждущей проверкой)
- мы встраивали ждущую проверку
- чтоб гарантировать - что на момент проверки урда - уже текущий урл изменился
- теперь - мы используем сразу ждущую проверку
- значит - ее достаточно
- единственное - я бы имя метода поменяла
- на assertUrl(...) например)
- */
- assertTrue(driver.findElement(By.cssSelector("#mainContent>h2")).getText().contains("What is Selenium?"));
- /*
- вот это убирай
- */
- }
- ****************************************************
- @Step
- public void search(String searchText) {
- driver.findElement(By.cssSelector("div [name='q']")).sendKeys((searchText) + Keys.ENTER);
- /*
- тут тоже можно использовать By.name("q")
- получится лаконичнее
- */
- }
- ***************************************************
- @Step
- public void assertNthResult(int index, String searchText) {
- new WebDriverWait(driver, 6).until(
- textToBePresentInElementLocated(By.cssSelector(".srg .rc:nth-child(" + index + ")"), (searchText)));
- }
- /*
- .srg .rc - это ты в нескольких методах используешь
- потому - вынеси этот селектор в переменную
- и ее используй вместо .srg .rc
- http://joxi.ru/V2VBQLqf0bxpy2
- http://joxi.ru/L210nzMu6E8e1m
- http://joxi.ru/v29WjP9hG83EGr
- сравни результаты по приведенным селекторам
- выводы
- нумерация в nth-child - с единицы
- все же корректнее использовать .srg .g а не .srg .rc в качестве селектора для результатов поиска
- почему так - см http://www.w3schools.com/cssref/css_selectors.asp
- в прошлом ревью это подробнее рассматривали - почитай
- и если вопросы останутся - давай обсудим в слек
- поскольку лучше оставить для index - нумерацию с нуля
- чтобы мы вызывали assertNthResult(0, ...) - для самого первого элемента
- то в качестве параметра в nth-child - передавай index+1
- */
- *****************************************
- /*
- Привожу ответ Якова - почему лучше использовать нумерацию с нуля
- Зачем нумеровать с нуля, если более удобочитаемо с 1 начинать?
- воно то зручно… але не очевидно
- залізе програміст якийсь в твій тест… і подумає що під 1 мається на зувазі 2гий елемент
- в принципі якщо хочеш… можеш і “з 1" залишити…
- але ти повинен розуміти що є сенс так робити тільки якщо всі в команді в тому числі і програмісти погодилися на це і сказали що ОК
- при цьому… тобі треба бути переконаним що скрізь буде нумерація з 1
- тобіш тобі треба створити наприклад врапер над іншими методами селеніума які працюють з індексами - щоб вони теж з 1 рахували :,)
- інакше буде плутанина
- по факту - простіше не плутатись і залишити рахунок з нуля
- а для индекса элемента в коллекции/массиве - применяется именно термин index
- мы используя такой термин - лишний раз подчеркнули - нумеруем с нуля
- лучше - быть понятнее для большинства
- большинство в большинстве случаев столкнулось с нумерацией с нуля)
- большинство увидело тот же термин - index
- надеюсь, я тебя убедила
- https://en.wikipedia.org/wiki/Zero-based_numbering
- http://c2.com/cgi/wiki?ZeroAndOneBasedIndexes
- http://stackoverflow.com/questions/24841172/why-is-array-indexing-in-java-start-w
- */
Advertisement
Add Comment
Please, Sign In to add comment