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>