Професионална програма
Loading...
Atanasov_88 avatar Atanasov_88 39 Точки

[QA Fundamentals] Lab Selenium - problem 4

Здравейте, имам проблем с втората част на решението на задача 4 от лаба. След като изпълня всичко, както трябва пак ми гърми кода. Пробвах няколко варианта, но вероятно бъркам при въвеждането на последния webelement - full name. Ето решението ми ТУК! 

Малко помощ няма да е излишна :)

 

Тагове:
1
QA Fundamentals
RoYaL avatar RoYaL Trainer 6845 Точки

Елементът в страницата не е с ID "validFullName". Не използваш ли inspect element или IDE приставката, за да видиш съответния селектор?

0
Atanasov_88 avatar Atanasov_88 39 Точки

Ами използвам го и намирам това - <div class="userName"> Камен Дамянов </div>. а в IDE приставката не ми дава value, както на username и password. Може и да бъркам някъде де...Или пък да е, защото не разпознава кирилица?

0
RoYaL avatar RoYaL Trainer 6845 Точки

IDE приставката трябва да е пусната, за да ти показва това. Ако не ти показва нищо, има в контекстното меню Show available commands. Иначе, да, това е елементът -  " <div class="userName"> Камен Дамянов </div>", който както може би сам забелязваш никъде няма атрибут "id", нито стойност "validFullName" :-)

Алтернатива, която се води стабилна ед а се ползва xpath. Този елемент можеш, ако имаш приставката Firebug (т.е. от контекстното меню ти се показват и Inspect element и Inspect element with firebug, и избереш второто) когато го намериш, да му кликнеш десен бутон и copy xpath и да го намериш по xpath, вместо по id.

2
Atanasov_88 avatar Atanasov_88 39 Точки

Хмм, да, май стана като го направих с xpath, макар че при копирането ми го изкара по друг начин. И махнах това, за да мине тестът успешно най-после: 

assertEquals("/html/body/div[1]/div/div[4]/div/div[4]/div/div[4]/div/div[2]/div/div[2]/div[1]/div[1]",fullName.getText());
0
RoYaL avatar RoYaL Trainer 6845 Точки

Това не е нормален assertion. getText() се очаква да върне името ти, а не xpath-a.

Нека започнем отначало:

Една страница се състои от много елементи (тагове) като например <p>, <div>, <input>, <span> и т.н.

Всички тези тагове могат да имат различни селектори (атрибути) - id, class, name... например <input name="first-name">; <div id="header">, <div class="red-button">

ID атрибутът е уникален, гарантира ни, че може да има само един таг с това ID в страницата

Name и Class атрибутите не са уникални, може да имаме много елементи, които са червени бутони (red-button) например.

Тези елементи могат да имат още атрибути, стойност ако са полета, текст между тях и т.н.

Например три елемента от страницата

<div id="header" class="big-red-block"> some_header </div>

<a class="red-button">click me to login</div>

<a class="red-button">click me to register<div>

 

В момента този елемент <div id="header" class="big-red-block"> some_header </div> има атрибути id, което е header и class, който е big-red-block и текст между него, който е some_header

За да намерим този елемент е хубаво да използваме най-конкретния селектор. За щастие ID е уникален и можем да разчитаме на него. Намираме го по ID което се казва header

WebElement imeNaPromelivaKoetoNqmaNishtoObshtoSysSelektora = driver.findElement(By.id("header"));

Искаме да видим какъв е класът са този елемент:

imeNaPromelivaKoetoNqmaNishtoObshtoSysSelektora.getAttribute("class");

Искаме да видим какво има между таговете (текста)

imeNaPromelivaKoetoNqmaNishtoObshtoSysSelektora.getText();

 

Другите два елемента нямат уникален селектор. Имат клас. И двата са DIV и не е оферта да използваме By.className() защото ще е трудно да нацелим кой от двата бутона ще хване така. Тогава използваме xpath. Копираме xpath-а и казваме

WebElement nqkakvaDrugaPromenliva = driver.findElement(By.xpath("x-path-a-koito-sme-kopirali"));

Трябва ни теста да мине, само ако текстът на този елемент е "click me to login".

НЕ слагаме xpath-а в assert-а, а това което assert-ваме (assert означава твърдение). Какво твърдим ние? Твърдим, че текстът на елемента е "click me to login". Как взимаме текста? С getText(). От ляво на assert-а се слага това, което е expected. Отдясно - това, което е актуалното.

assertEquals("click me to login", nqkakvaDrugaPromenliva.getText());

 

4