Lokalizacja elementów
Lokalizacja elementów
Lokalizacja elementów
Lokalizacja elementów
Dobre praktyki przy klikaniu przycisków:
Poczekaj aż element będzie widoczny / klikalny
Unikaj używania click()
na niewidocznych elementach. Jeśli element jest w DOM-ie, ale nie jest widoczny na stronie, metoda click()
może nie zadziałać. W takich przypadkach można użyć JavaScriptExecutor do wymuszenia kliknięcia (choć lepiej najpierw sprawdzić widoczność elementu). Zawsze poczekaj, aż element będzie widoczny i klikalny przy pomocy klasy WebDriverWait
. To nie wydłuży sztucznie testów — jeśli przycisk pojawi się wcześniej, Selenium kliknie natychmiast. WebDriverWait
nie działa jak twarde czekanie (Thread.sleep(10000)
), które zawsze wstrzymuje testy na pełne 10 sekund. Zamiast tego jest to czekanie jawne (explicit wait) — Selenium - czeka, aż warunek zostanie spełniony (np. element stanie się klikalny) i jeśli nie znajdzie elementu w określonym czasie, rzuca wyjątek (TimeoutException
).
WebDriverWait
– Klasa w Selenium, która umożliwia czekanie na określony warunek przez podany maksymalny czas. Działa w parze z ExpectedConditions
, by reagować dopiero, gdy strona będzie gotowa do interakcji.
java
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
//WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("ClickOnMe")));
button.click();
Sposoby kliknięcia w przycisk
java
driver.findElement(By.id("ClickOnMe")).click();
Kliknięcie po wcześniejszym oczekiwaniu:
java
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement button = wait.until(ExpectedConditions.elementToBeClickable(By.id("ClickOnMe")));
button.click();
Kliknięcie za pomocą JavaScript (jeśli standardowe nie działa):
java
WebElement button = driver.findElement(By.id("ClickOnMe"));
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("arguments[0].click();", button);
Kliknięcie przez Actions (symulowanie myszki):
java
WebElement button = driver.findElement(By.id("ClickOnMe"));
Actions actions = new Actions(driver);
actions.moveToElement(button).click().perform();
👀 Pro tip: Dodaj logowanie/debug info:
java
System.out.println("Klikam w przycisk 'ClickOnMe'");
clickOnMeButton.click();
Lokalizowanie elementu za pomocą id
<body>
<h1>Strona Testowa</h1>
<button type="button" id="clickOnMe" onclick="alert('Hello world!')">Kliknij mnie!</button> <br>
<label for="fname"> First name:</label> <br>
<input type="text" name="fname" id="fname"><br>
<a href="https://www.w3schools.com">Visit W3Schools.com!</a> <br>
<a href="https://www.google.com">IamWeirdLink</a> <br>
<table border="1">
<tbody><tr>
<th class="tableHeader">Month</th>
<th class="tableHeader">Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</tbody></table>
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option selected="selected" value="audi">Audi</option>
</select>
<br>
<label><input type="checkbox"> Potwierdzam 100% nieznajomość regulaminu. Kto ma czas na czytanie regulaminów</label>
<form action="">
<input type="radio" name="gender" value="male"> Male<br>
<input type="radio" name="gender" value="female"> Female<br>
<input type="radio" name="gender" value="other"> Other
</form>
<form action="" onsubmit="alert('On submit method')">
Nazwa użytkownika<br>
<input type="text" name="username" value="Mickey"><br>
Hasło:<br>
<input type="password" name="password" value="Mouse"><br><br>
<input type="submit" value="Submit" onclick="alert('Formularz wyslany')">
</form>
<img id="smileImage" src="smile.png">
<p hidden="" class="topSecret">This paragraph should be hidden.</p>
<button id="newPage" onclick="myFunction()">Click me</button>
<br>
<div id="container">
<ul>
<li> List Item
<ul>
<li> Child </li>
</ul>
</li>
<li> List Item </li>
<li> List Item </li>
<li> List Item </li>
</ul>
</div>
</body>
Lokalizowanie elementów za pomocą selektora CSS
<body>
<h1>Strona Testowa</h1>
<button type="button" id="clickOnMe" onclick="alert('Hello world!')">Kliknij mnie!</button> <br>
<label for="fname"> First name:</label> <br>
<input type="text" name="fname" id="fname"><br>
<a href="https://www.w3schools.com">Visit W3Schools.com!</a> <br>
<a href="https://www.google.com">IamWeirdLink</a> <br>
<table border="1">
<tbody><tr>
<th class="tableHeader">Month</th>
<th class="tableHeader">Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</tbody></table>
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option selected="selected" value="audi">Audi</option>
</select>
<br>
<label><input type="checkbox"> Potwierdzam 100% nieznajomość regulaminu. Kto ma czas na czytanie regulaminów</label>
<form action="">
<input type="radio" name="gender" value="male"> Male<br>
<input type="radio" name="gender" value="female"> Female<br>
<input type="radio" name="gender" value="other"> Other
</form>
<form action="" onsubmit="alert('On submit method')">
Nazwa użytkownika<br>
<input type="text" name="username" value="Mickey"><br>
Hasło:<br>
<input type="password" name="password" value="Mouse"><br><br>
<input type="submit" value="Submit" onclick="alert('Formularz wyslany')">
</form>
<img id="smileImage" src="smile.png">
<p hidden="" class="topSecret">This paragraph should be hidden.</p>
<button id="newPage" onclick="myFunction()">Click me</button>
<br>
<div id="container">
<ul>
<li> List Item
<ul>
<li> Child </li>
</ul>
</li>
<li> List Item </li>
<li> List Item </li>
<li> List Item </li>
</ul>
</div>
</body>