Кликване върху елементи в селен с помощта на JavaScript

1. Въведение

В този кратък урок ще разгледаме прост пример за това как да щракнете върху елемент в Selenium WebDriver с помощта на JavaScript.

За нашата демонстрация ще използваме JUnit и Selenium, за да отворим //baeldung.com и да потърсим статии „Selenium“.

2. Зависимости

Първо, добавяме зависимостите от селен-java и junit към нашия проект в pom.xml :

 org.seleniumhq.selenium selenium-java 3.141.59   junit junit 4.13 test 

3. Конфигурация

След това трябва да конфигурираме WebDriver. В този пример ще използваме изпълнението на Chrome:

@Before public void setUp() { System.setProperty("webdriver.chrome.driver", new File("src/main/resources/chromedriver.mac").getAbsolutePath()); driver = new ChromeDriver(); }

Използваме метод, анотиран с @Before, за да извършим първоначалната настройка преди всеки тест. Вътре задаваме свойството webdriver.chrome.driver, определящо местоположението на драйвера на chrome. След това правим екземпляр на обекта WebDriver .

Когато тестът приключи, трябва да затворим прозореца на браузъра. Можем да го направим, като поставим оператора driver.close () в метод, отбелязан с @After . Това гарантира, че ще бъде изпълнено, дори ако тестът не успее:

@After public void cleanUp() { driver.close(); }

4. Отваряне на браузъра

Сега можем да създадем тестов случай, който ще направи първата ни стъпка - отворете уебсайта:

@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults()  driver.get("//baeldung.com"); String title = driver.getTitle(); assertEquals("Baeldung 

Тук използваме метода driver.get () , за да заредим уеб страницата. След това проверяваме заглавието му, за да сме сигурни, че сме на правилното място.

5. Кликване върху елемент с помощта на JavaScript

Селенът се предлага с удобен метод WebElement # click , който извиква събитие за щракване върху даден елемент. Но в някои случаи действието с щракване не е възможно.

Един пример е, ако искаме да щракнем върху деактивиран елемент. В този случай WebElement # click изхвърля IllegalStateException . Вместо това можем да използваме поддръжката на JavaScript на Selenium.

За да направите това, първото нещо, от което ще се нуждаем, е JavascriptExecutor . Тъй като използваме внедряването на ChromeDriver , можем просто да го прикачим към това, от което се нуждаем:

JavascriptExecutor executor = (JavascriptExecutor) driver;

След като получим JavascriptExecutor , можем да използваме неговия метод executeScript . Аргументите са самият скрипт и масив от параметри на скрипта. В нашия случай извикваме метода click на първия аргумент:

executor.executeScript("arguments[0].click();", element);

Сега нека го съберем в един метод, който ще наречем clickElement :

private void clickElement(WebElement element) { JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", element); }

И накрая, можем да добавим това към нашия тест:

@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults() { // ... load //baeldung.com WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor")); clickElement(searchButton); WebElement searchInput = driver.findElement(By.id("search")); searchInput.sendKeys("Selenium"); WebElement seeSearchResultsButton = driver.findElement(By.cssSelector(".btn-search")); clickElement(seeSearchResultsButton); }

6. Некликващи елементи

Един от най-често срещаните проблеми, възникващи при щракване върху елемент с помощта на JavaScript, е изпълнението на скрипта за кликване, преди елементът да може да се кликне. В тази ситуация действието с щракване няма да се случи, но кодът ще продължи да се изпълнява.

За да преодолеем този проблем, трябва да задържим изпълнението, докато кликването стане достъпно. Можем да използваме WebDriverWait # докато изчакаме, докато бутонът се изобрази.

Първо, обектът W ebDriverWait изисква два параметъра; драйвера и таймаут:

WebDriverWait wait = new WebDriverWait(driver, 5000); 

След това се обаждаме до , като даваме очакваното условие elementToBeClickable :

wait.until(ExpectedConditions.elementToBeClickable(By.className("nav--menu_item_anchor"))); 

И след като се върне успешно, знаем, че можем да продължим:

WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor")); clickElement(searchButton);

За повече налични методи за състояние вижте официалната документация.

7. Заключение

В този урок научихме как да щракнем върху елемент в Selenium с помощта на JavaScript. Както винаги, източникът на статията е достъпен в GitHub.