WebElement в Selenium
WebElement в Selenium
Формулярите са основните уеб елементи за получаване на информация от посетителите на уебсайта. Уеб формулярите имат различни GUI елементи като текстови полета, полета за пароли, квадратчета за отметка, радио бутони, падащи менюта, въвеждане на файлове и др.
Ще видим как да осъществим достъп до тези различни елементи на формуляра с помощта на Selenium Уеб драйвер с Java. Selenium капсулира всеки елемент на формуляр като обект на WebElement. Той предоставя API за намиране на елементите и предприемане на действия върху тях като въвеждане на текст в текстови полета, щракване върху бутоните и т.н. Ще видим методите, които са налични за достъп до всеки елемент на формуляр.
Въведение в WebElement, findElement(), findElements()
Selenium Web Driver капсулира прост елемент на формуляр като обект на WebElement.
Има различни техники, чрез които WebDriver идентифицира елементите на формуляра въз основа на различните свойства на уеб елементите като ID, име, клас, XPath, име на тагове, CSS селектори, текст на връзка и т.н.
Web Driver предоставя следните два WebElement метода за намиране на елементите.
- findElement() – намира един уеб елемент и се връща като WebElement Selenium обект.
- findElements() – връща списък с WebElement обекти, отговарящи на критериите за локатор.
Нека видим кодовите фрагменти, за да получим един елемент – текстово поле в уеб страница като обект на WebElement, използвайки метода findElement(). Ще разгледаме метода findElements() за намиране на множество елементи в следващите уроци.
Стъпка 1) Трябва да импортираме този пакет, за да създадем обекти на уеб елементи
Стъпка 2) Трябва да извикаме метода findElement(), наличен в класа WebDriver, и да получим обект на WebElement.
Вижте по-долу, за да видите как се прави.
Selenium Въвеждане на текст
Полетата за въвеждане се отнасят за един от тези два типа:
- Текстови полета- Selenium текстови полета за въвеждане, които приемат въведени стойности и ги показват такива, каквито са.
- Полета за парола– текстови полета, които приемат въведени стойности, но ги маскират като поредица от специални знаци (обикновено точки и звездички), за да се избегне показването на чувствителни стойности.
локатори
Методът findElement() приема един параметър, който е локатор към елемента. Различни локатори като By.id(), By.name(), By.xpath(), By.CSSSelector() и т.н. намират елементите в страницата, използвайки техните свойства като „““ id, име или път и т.н.
Можете да използвате плъгини като Fire path, за да получите помощ за получаване на id, xpath и т.н. на елементите.
Използване на примерния сайт https://demo.guru99.com/test/login.html даден по-долу е кодът за намиране на текстовото поле „Имейл адрес“ с помощта на локатора на id и полето „Парола“ с помощта на локатора на име.
- Текстовото поле за имейл се намира по Id
- Полето за парола се намира по име
изпрати ключове в Selenium
sendkeys() в Selenium е метод, използван за въвеждане на редактируемо съдържание в полетата за текст и парола по време на изпълнение на теста. Тези полета се идентифицират с помощта на локатори като име, клас, идентификатор и т.н. Това е метод, наличен в уеб елемента. За разлика от метода тип, методът sendkeys() не замества съществуващ текст в нито едно текстово поле.
Как да въведете текст в Selenium
За да въведете текст в текстовите полета и полетата за парола, sendKeys() е методът, наличен в WebElement в Selenium.
Използвайки същия пример на https://demo.guru99.com/test/login.html сайт, ето как намираме текстовото поле и полетата за парола и въвеждаме текст в тях Selenium.
- Намерете текстовото поле „Имейл адрес“, като използвате локатора на id.
- Намерете полето „Парола“, като използвате локатора на имена
- Въведете текст в „Имейл адрес“, като използвате Selenium метод sendkeys.
- Въведете парола в полето „Парола“, като използвате метода sendKeys().
Изтриване на стойности във входа Boxes
- изчисти () методът се използва за изтриване на текст в поле за въвеждане. Този метод не се нуждае от параметър. Кодовият фрагмент по-долу ще изчисти текста от полетата Имейл или Парола
Selenium Кликнете върху Бутони
- Selenium бутонът click може да бъде достъпен чрез метода click().
В горния пример
- Намерете бутона за влизане
- Кликнете върху бутона „Вход“ в страницата за вход на сайта, за да влезете в сайта.
Selenium Бутони за изпращане
Бутоните за изпращане се използват за изпращане на целия формуляр към сървъра. Можем или да използваме метода click () върху уеб елемента като нормален бутон, както направихме по-горе, или да използваме метода submit () за всеки уеб елемент във формуляра или върху самия бутон за изпращане.
Когато се използва submit(), WebDriver ще търси DOM, за да знае към коя форма принадлежи елементът, и след това ще задейства своята функция за изпращане.
Пълен код
Ето пълния работен код
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.*; public class Form { public static void main(String[] args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String baseUrl = "https://demo.guru99.com/test/login.html"; driver.get(baseUrl); // Get the WebElement corresponding to the Email Address(TextField) WebElement email = driver.findElement(By.id("email")); // Get the WebElement corresponding to the Password Field WebElement password = driver.findElement(By.name("passwd")); email.sendKeys("abcd@gmail.com"); password.sendKeys("abcdefghlkjl"); System.out.println("Text Field Set"); // Deleting values in the text box email.clear(); password.clear(); System.out.println("Text Field Cleared"); // Find the submit button WebElement login = driver.findElement(By.id("SubmitLogin")); // Using click method to submit form email.sendKeys("abcd@gmail.com"); password.sendKeys("abcdefghlkjl"); login.click(); System.out.println("Login Done with Click"); //using submit method to submit the form. Submit used on password field driver.get(baseUrl); driver.findElement(By.id("email")).sendKeys("abcd@gmail.com"); driver.findElement(By.name("passwd")).sendKeys("abcdefghlkjl"); driver.findElement(By.id("SubmitLogin")).submit(); System.out.println("Login Done with Submit"); //driver.close(); } }
Отстраняване на проблеми
Ако срещнете NoSuchElementException(), докато намирате елементи, това означава, че елементът не е намерен в страницата в момента, в който уеб драйверът е осъществил достъп до страницата.
- Проверете локатора си отново с помощта на Firepath или Inspect Element в Chrome.
- Проверете дали стойността, която сте използвали в кода, е различна от тази за елемента в Firepath сега.
- Някои свойства са динамични за няколко елемента. В случай, че установите, че стойността е различна и се променя динамично, обмислете използването на By.xpath() или By.cssSelector(), които са по-надеждни, но сложни начини.
- Понякога може да е и проблем с изчакване, т.е. уеб драйверът е изпълнил вашия код дори преди страницата да се е заредила напълно и т.н.
- Добавете изчакване преди findElement(), като използвате неявни или явни изчаквания.
Oбобщение
- Таблицата по-долу обобщава командите за достъп до всеки тип елемент, обсъден по-горе
Element | Команда | Descriptйон |
---|---|---|
Вход Box | sendKeys() | използвани за въвеждане на стойности в текстови полета |
изчисти () | използва се за изчистване на текущата стойност на текстовите полета | |
Връзки | клик() | използва се за щракване върху връзката и изчакване зареждането на страницата да завърши, преди да преминете към следващата команда. |
Подаване на Бътън | изпращам () |
- WebDriver позволява избор на повече от една опция в множество SELECT елемент.
- Можете да използвате метода submit() за всеки елемент във формуляра. WebDriver автоматично ще задейства функцията за изпращане на формуляра, към който принадлежи този елемент.