昨天简单的介绍了5种定位方式-by.id(),-by.xpath(),-by.linkText(),-by.partialLinkText(),by.cssSelector(),那么今天我们来介绍另外几种定位方式。
-by.name(),by.className(),-by.tagName()
1.好,第一个看看By.name(); name 属性一般用来对于提交到服务器后的表单数据进行标识,或者在客户端通过js引用表单数据,只有设置了name属性值得表单元素才能在提交表单时传递他们的数据。
那么还是以百度首页为例子,可以看到输入框的name="wd",所以我们来看一下
public class eightMthods {
public static void main(String[] args) throws Exception {
WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
/*
*1. 根绝name来定位元素
*/
String PhotoUrl = "https://www.baidu.com";
driver.get(PhotoUrl);
driver.findElement(By.name("wd")).sendKeys("安徽师范大学");
driver.findElement(By.id("su")).click();
2.第二个再来看看by.className()方法
className属性是利用元素的css样式表所引用的伪类名称来进行元素查找的方法。对于任何HTML页面的元素来说,一般程序员或页面设计师会给元素直接赋予一个样式属性或者利用css文件里的伪类来定义元素样式,使元素在页面上显示时能够更加美观。
.beautifulStyle{
width: 50px;
height: 50px;
border-radius: 50%;
}
而当我们设计一个button的时候,我们就需要引用这个样式表,来装饰我们的button
<button name="oneBtnName" id="oneBtnId" class="beautifulStyle">I'm Lion Button</button>
这样就把上面的样式表引用到我们的按钮上了,所以此时我们就可以通过.className()属性来操作此按钮了
driver.findElement(By.className("beautifulStyle")).click();
在这里应该注意一点,有的元素属性claaName是带有空格的,className 为"bg s_btn"
className点击会报错selector,不允许组合的class name,是因为这个className中间有空格,所以以后遇到有空格的className就不要用它定位
3.最后一个By.tagName(String tagName)
tagName表示标签名,即通过html标签名字进行定位,但是因为一般页面上同名的标签不止一个,所以,在实际的运用中并不是很实用,比如百度的首页输入框元素:
通过 findElements查找百度首页的所有 input标签:
List<WebElement> inputs = driver.findElements(By.tagName("input"));