前面文章介绍完了driver的一些常见的浏览器设置和查找元素的接口,接下来,我们找到了元素,是为了去操作元素。这篇介绍元素操作常见方法中的,给元素写入一个字符串,和点击元素。一般来讲,给元素输入一个字符串,这样的元素,一般是可以输入文本,基本上是inputbox这样的前端元素,还有些是textarea这样的元素。而点击元素,这个范围就大了,第一个肯定是点击按钮,除了按钮,单选,多选按钮,有些label标签和超链接也是用点击方法。给元素上传入一个字符串并显示在该元素上,我们用sendKeys()方法,点击元素,我们用click()方法。
我想先来看看sendKeys()和click()的源码。
public void click() {
execute(DriverCommand.CLICK_ELEMENT, ImmutableMap.of("id", id));
}
public void sendKeys(CharSequence... keysToSend) {
File localFile = fileDetector.getLocalFile(keysToSend);
if (localFile != null) {
String remotePath = upload(localFile);
keysToSend = new CharSequence[]{remotePath};
}
execute(DriverCommand.SEND_KEYS_TO_ELEMENT, ImmutableMap.of("id", id, "value", keysToSend));
}
上面第一个是我们需要调用的click()方法。click方法里面调用了DriverConmand类中的一个方法,叫CLICK_ELEMENT,也就是点击元素,这个方法底层应该是用javascript实现的。因为浏览器大部分都支持Javascript这个脚本语言。第二个方法是sendKes(),这个方法大致实现步骤是这样的:把你想要输入的字符串,放到本地一个文件,这样java就能识别这个文件,然后调用upload()方法,把这个包含字符串文件进行zip压缩,上传到一个浏览器端,然后浏览器端得到zip文件,进行加压缩,把文件里面的字符串提取出来,变成一个CharSequence对象,也就是一个新的有序的字符串对象,最后执行DriverCommad里面关于传字符到元素的方法。整个sendKeys()实现流程就是这样,了解一下就可以。
运用举例,用sendKeys()方法给百度搜索输入框输入一个关键词,用click()方法点击搜索提交按钮。
package lessons;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class FindElements {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.get("https://news.baidu.com");
driver.findElement(By.id("kw")).sendKeys("Selenium");
driver.findElement(By.id("su")).click();
}
}
总结:
给元素上输入字符,就调用sendkeys()方法这个方法的参数,一般都是String类型,模拟鼠标左键,点击元素就调用click()方法,这两个方法没有返回值。基本上你的自动化测试脚本,大部分方法都是围绕这两个使用频率最高的事件服务。