Java+Selenium3方法篇5-findElement之By id

       前面文章介绍了一些driver操作浏览器设置的一些接口,其中接口里面的一些方法,我们经常用到。现在开始介绍一些和元素相关的接口或者方法,web自动化测试的核心就是找到网页元素,并相应去操作元素。所以,我们接下来很大的文章篇幅都和元素查找和元素操作有关。要操作元素,先要找到元素,Selenium中findElement接口能支持八种方法去查找网页元素,今天这里,介绍By id的方法。

       在开始介绍By id之前,我先提下,如何去查找findElement接口的源码,前面有一篇文章介绍了Eclipse上如何查看Selenium源码。其实前面文章介绍不够完整,只是介绍了如何查看Selenium相关接口或者方法的声明,更多的是接口文档形式,读了之后,你可以知道哪些方法有哪些作用。如果要看真正的java源码,今天这篇文章就可以满足你的要求。

1. 如何查看某一个接口的实现代码。

在测试代码中的driver.findElement,通过前面介绍的方法,进入到WebDriver.java这个文件,搜索找到 findElement()这个接口,然后按照如下图的方法进入实现代码的文件。

Java+Selenium3方法篇5-findElement之By id_第1张图片

接下来,点击RemoteWebDriver

Java+Selenium3方法篇5-findElement之By id_第2张图片

进入如下图

Java+Selenium3方法篇5-findElement之By id_第3张图片

如果你还想看看By这个类如何实现的,你继续Ctrl,然后鼠标悬停在By 这个单词,选择进入源码。

Java+Selenium3方法篇5-findElement之By id_第4张图片

这里我们选择查看ById这个方法。

Java+Selenium3方法篇5-findElement之By id_第5张图片

       这段代码意思是:方法返回是WebElement类型,参数context是SearchContext类的一个实例。现判断,如果参数是 FindsById的一个实例,那么就调用FindsById里面的方法去返回这个WebElement,如果if里面表达式为False,那么这里就调用XPath里面的@id的方法去找元素,并返回这个WebElement。XPaht的相关知识,后面会介绍。如果你还想看findElementById(id)的方法,你按照上面的方法继续去查找相关源码。

       回到findElement这个接口,里面的各种找元素的方法,返回的都是一个列表,元素就存储在这个列表里。driver这个浏览器实例对象调用了findElement方法,就把元素返回给driver这个实例,然后才可以去操作元素。关于如何查找元素的id和XPath,我推荐你去看一下我之前写过的一篇文章,点击这里。简单来说,就是在火狐浏览器上,先安装firebug插件,然后安装firepath插件,就可以了。我们这里用百度首页,搜索输入框定位来介绍如何查找这个元素的id,直接看图。

上面红圈的kw就是百度首页文本输入框对应元素的id。

用Java来写这个元素查找并输入关键字“Java”的脚本如下。

package lessons;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;


public class PageLoadTest {
	
public static void main(String[] args) {
		
		System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe");
		
		WebDriver driver = new ChromeDriver();
		
		driver.get("https://www.baidu.com");
	
		//By id 查找元素
		driver.findElement(By.id("kw")).sendKeys("Java");
		
	}

}
       运行一下,观察效果。上面脚本中的sendKeys()方法,我们再后边文章会介绍,如果网页元素是一个可以输入的文本框,就可以调用这个方法去实现,把你想要输入的字符串输入到该文本框内。

关于findElement()中的By.id方式就介绍到这里,下一篇介绍By.XPath





你可能感兴趣的:(Java+Selenium3,findElement,By-Id)