blog.testowka.pl

Kurs Selenium część 3 – Operacje na elementach stron WWW

opublikowany przez 19, Lis, 2012, w kategoriach Automatyzacja, Kurs Selenium, Testowanie

Całość kursu dostępna tutaj

Selenium WebDriver jest biblioteką w pełni obiektową. Zgodnie z założeniem wszystko w tym także elementy na stronie są obiektami. Dzięki takiemu podejściu możemy elementy wyszukiwać i zapisywać w pamięci jako obiekty, po czym wykonywać akcje na obiektach.

Model obiektowy przydaje się także podczas modelowania struktury naszych testów, ale o tym będzie w kolejnych rozdziałach.

Najpierw inicjalizujemy obiekt typu WebElement

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

 

WebElement linkToAgilePage = driver.findElement(By.linkText("Agile"));

Istnieje wiele różnych sposobów na wyszukiwanie elementów na stronie.
Aby sprawdzić czego możemy użyć wpisujemy w Eclipse:

driver.findElement(By.

i wciskamy [SPACJA]. IDE podpowie nam czego możemy użyć.

Najczęściej używane (przeze mnie) to:

By.id();
By.name();
By.linkText();
By.xpath();

Dzieki takiej różnorodności możemy wybrać metodę poszukiwania elementów na stronie, która będzie najmniej ryzykowna. Chodzi tutaj o ryzyko tego, że dany element wkrótce może się zmienić albo nie będzie unikatowy.

Następnie możemy wykonywać już akcje na wyszukanych obiektach.

linkToAgilePage.click();

Przykładowy test z kilkoma akcjami wykonanymi na elementach strony znajdziecie poniżej. W następnym rozdziale zajmiemy się czyszczeniem naszych testów tak by były bardziej fczytelne.

package pl.testowka;

import static org.testng.Assert.*;
import org.testng.annotations.AfterClass;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class TestowkaTest {

	static WebDriver driver;

	@BeforeClass
	public void setUp() {
		driver = new FirefoxDriver();
	}

	@Test
	public void ShouldBePosibleToSearchTestowkaAtGoogle()
			throws InterruptedException {
		driver.get("http://google.pl");
		WebElement searchField = driver.findElement(By.name("q"));
		searchField.sendKeys("testowka.pl");
		WebElement searchButton = driver.findElement(By
				.xpath("//*[@id=\"gbqfb\"]/span"));
		searchButton.click();
		for (int second = 0;; second++) {
			if (second >= 60)
				fail("timeout");
			try {
				if (driver.findElement(By.linkText("Testowka.pl"))
						.isDisplayed()) {
					break;
				}
			} catch (Exception e) {
			}
			Thread.sleep(1000);
		}
		WebElement linkToTestowka = driver.findElement(By
				.linkText("Testowka.pl"));
		linkToTestowka.click();
	}

	@AfterClass
	public static void tearDown() {
		driver.close();
	}

}

 


5 Comments for this entry

  • miko

    Stary, dzięki za tak kurs!
    Nareszcie coś przystępnego (albo po prostu ja jestem tuman xD )

  • Lee

    Cześć.
    Po odpaleniu ww. testu dostaję błąd:
    java.langAssertionError:timeout
    Pytanie dlaczego występuje i jak go usunąć?

    Przyczyna błędu leży gdzieś tutaj:
    for (int second = 0;; second++) {
    if (second >= 60)
    fail(„timeout”);
    try {
    if (driver.findElement(By.linkText(„Testowka.pl”))
    .isDisplayed()) {
    break;
    }
    } catch (Exception e) {
    }

    Będę wdzięczny za feedback.
    Pozdrawiam.

  • streser

    Wyglada na to ze zmienila sie struktura html wynikowej strony google. W mitycznej wolnej chwili to przerobie chyba ze ktos juz rozwiazal ten problem?

  • kupix

    nie zmieniła się struktura. przykład nadal działa.

  • streser

    W takim razie problem może dotyczyć tylko niektórych. Zalecam nie używanie w testach ostatniej wersji firefox/chrome to częste źródło problemów – warto zawsze być 1-2 wersje do tyłu. Warto też sprawdzić jaka jest ostatnia wersja selenium-java czy selenium-firefox oraz zrobić aktualizację.

Skomentuj