Selenium 简明教程
Selenium WebDriver - Handling Forms
Selenium Webdriver 可用于处理网页上的表单。在 HTML 术语中,表单元素通过称为 * Form* 的标签名来识别。此外,它应具备提交表单的功能,用于提交表单的元素应具有标签名 * input* ,同时属性 type 的值为 submit 。必须注意的是,网页上的表单可能包含文本框、链接、复选框、单选按钮和其他 Web 元素,这些元素将帮助用户在网页上输入详细信息。
Identification of Forms on Web Page
右键点击在 Chrome 浏览器中打开的页面。点击“检查”按钮。之后,整个页面的 * HTML* 代码将显示出来。要调查页面上的表单元素,请点击位于 HTML 代码顶部的左上角箭头,如下所示。
一旦我们点击并将箭头指向表单中的任何元素(例如,注册按钮),就可以看到其 HTML 代码,其中反映了 form 标签名。
在上面的表单中,我们可以使用 Register 按钮并填写详细信息来提交表单。一旦我们点击并将箭头指向 Register 按钮,就会出现其 HTML 代码,其中反映了 input 标签名,其 type 属性的值为 submit 。
<input type="submit" class="btn btn-primary" value="Register">
我们可以借助 submit() 和 click() 方法提交表单。普通按钮和提交按钮之间的基本区别在于,普通按钮只能通过 click() 方法进行交互,但提交按钮可以通过 click() 和 submit() 方法进行交互。
Syntax
使用 submit 方法的语法 -
WebDriver driver = new ChromeDriver();
// identify input box 1
WebElement inputBx = driver.findElement
(By.xpath("<value of xpath>"));
inputBx.sendKeys("Selenium");
// submit form
WebElement btn = driver.findElement
(By.xpath("<value of xpath>"));
btn.submit();
此外,普通按钮具有 input 标签名,其 type 属性应为 button 。在下面的页面中,让我们看看网页上 Click Me 按钮的 HTML 代码。
<button type="button" class="btn btn-primary"
onclick="showDiv()">Click Me</button>
Example 1 - Using submit() Method
让我们看下面页面中的表单示例,它包含以下 Web 元素:标签、输入框、按钮、密码等。
Syntax
WebDriver driver = new ChromeDriver();
// identify input box 1
WebElement inputBx = driver.findElement
(By.xpath("<value of xpath>"));
inputBx.sendKeys("Selenium");
// get value entered
System.out.println("Value entered in FirstName: " + inputBx.getAttribute("value"));
// identify input box 2
WebElement inputBx2 = driver.findElement
(By.xpath("<value of xpath>"));
inputBx2.sendKeys("Tutorials");
// get value entered
System.out.println("Value entered in LastName: " + inputBx2.getAttribute("value"));
// identify input box 3
WebElement inputBx3 = driver.findElement
(By.xpath("<value of xpath>"));
inputBx3.sendKeys("Tutorialspoint");
// identify input box 4
WebElement inputBx4 = driver.findElement
(By.xpath("<value of xpath>"));
inputBx3.sendKeys("Tutorialspoint");
// submit form
WebElement btn = driver.findElement
(By.xpath("<value of xpath>"));
btn.submit();
代码实现
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class FormElements {
public static void main(String[] args) {
// Initiate the Webdriver
WebDriver driver = new ChromeDriver();
// adding implicit wait of 15 secs
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
// Opening the webpage where we will identify form
driver.get("https://www.tutorialspoint.com/selenium/practice/register.php");
// identify input box 1
WebElement inputBx = driver.findElement(By.xpath("//*[@id='firstname']"));
inputBx.sendKeys("Selenium");
// get value entered
System.out.println("Value entered in FirstName: " + inputBx.getAttribute("value"));
// identify input box 2
WebElement inputBx2 = driver.findElement(By.xpath("//*[@id='lastname']"));
inputBx2.sendKeys("Tutorials");
// get value entered
System.out.println("Value entered in LastName: " + inputBx2.getAttribute("value"));
// identify input box 3
WebElement inputBx3 = driver.findElement(By.xpath("//*[@id='username']"));
inputBx3.sendKeys("Tutorialspoint");
// get value entered
System.out.println("Value entered in UserName: " + inputBx3.getAttribute("value"));
// identify input box 4
WebElement inputBx4 = driver.findElement(By.xpath("//*[@id='password']"));
inputBx3.sendKeys("Tutorialspoint");
// submit form with submit method
WebElement btn = driver.findElement(By.xpath("//*[@id='signupForm']/div[5]/input"));
btn.submit();
// Close browser
driver.quit();
}
}
Value entered in FirstName: Selenium
Value entered in LastName: Tutorials
Value entered in UserName: Tutorialspoint
Process finished with exit code 0
在上面的示例中,我们在包含输入框的表单中填写内容,然后使用控制台中的消息获取输入的值(除了密码字段) - Value entered in FirstName: Selenium, Value entered in LastName: Tutorials 和 Value entered in UserName: Tutorialspoint 。
最后,收到了消息 Process finished with exit code 0 ,表示代码成功执行。
Example 2 - Using click() Method
让我们看下面页面中的表单的另一个示例,它包含以下 Web 元素:标签、输入框、按钮、密码等。
Syntax
使用 click() 方法的语法 -
WebDriver driver = new ChromeDriver();
// identify input box 1
WebElement inputBx = driver.findElement(By.xpath("<value of xpath>"));
inputBx.sendKeys("Selenium");
// get value entered
System.out.println("Value entered in FirstName: " + inputBx.getAttribute("value"));
// identify input box 2
WebElement inputBx2 = driver.findElement(By.xpath("<value of xpath>"));
inputBx2.sendKeys("Selenium");
// submit form
WebElement btn = driver.findElement(By.xpath("<value of xpath>"));
btn.click();
代码实现
package org.example;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.concurrent.TimeUnit;
public class FormElement {
public static void main(String[] args) {
// Initiate the Webdriver
WebDriver driver = new ChromeDriver();
// adding implicit wait of 15 secs
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
// Opening the webpage where we will identify form
driver.get("https://www.tutorialspoint.com/selenium/practice/login.php");
// identify input box 1
WebElement inputBx = driver.findElement(By.xpath("//*[@id='email']"));
inputBx.sendKeys("Selenium");
// get value entered
System.out.println("Value entered in Email: " + inputBx.getAttribute("value"));
// identify input box 2
WebElement inputBx2 = driver.findElement(By.xpath("//*[@id='password']"));
inputBx2.sendKeys("Tutorials");
// submit form with click() method
WebElement btn = driver.findElement(By.xpath("//*[@id='signInForm']/div[3]/input"));
btn.click();
// Closing browser
driver.quit();
}
}
Value entered in Email: Selenium
在上面的示例中,我们在包含输入框的表单中填写内容,然后使用控制台中的消息获取输入的值(除了密码字段) - Value entered in Email: Selenium 。