selenium定位到元素后获取其属性_Selenium界面自动化测试(4)(Java):元素定位及操作...

在操作Web元素之前,需要先找到该元素,这个查找的过程称之为元素定位。

Selenium支持8种元素定位方法:

  • ID:根据元素的id属性值来定位元素。

  • Name:根据元素的name属性值来定位元素。

  • Class Name:根据元素的class属性值来定位元素。不允许使用复合类名,即当时,不能使用“class-a class-b”来定位该元素,但可以使用“class-a”或“class-b”来定位。

  • Tag Name:根据元素的HTML标签名来定位元素。

  • CSS Selector:根据CSS选择器来定位元素。CSS选择器常用语法如下表所示:

2022b64fd20c80251ae6fc2d5b6da268.png

  • XPath:根据XPath表达式来定位元素。XPath全称XML Path Language,即XML路径语言,其常用语法如下表所示:

0c0806350d65a96b2dccc33e854f3899.png

  • Link Text:根据超链接文本来定位元素。其基于XPath定位。

  • Partial Link Text:根据超链接中的部分文本来定位元素。其基于XPath定位。

By类中有8个静态方法分别用于接收以上8种元素定位方法的字符串,以此构建By对象,然后把By对象传递给WebDriver对象的findElement或findElements方法,前者返回WebElement对象,后者返回List对象。WebElement对象表示单个元素,List对象表示一组元素。

一旦定位到了元素,即可对元素进行操作,比如输入文本、点击、获取文本等。

findElement和findElements方法是WebDriver接口提供的,如果使用ChromeDriver、FirefoxDriver等实现类时,还可以调用诸如findElementByCssSelector之类的快捷方法,可避免手工构建By对象。

如果您还没部署IMS,请参考“Dubbo接口自动化测试(2):部署示例应用程序”。

以登录IMS为例演示元素定位及操作:

package com.lujiatao.seleniumtest;import org.openqa.selenium.By;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;import java.util.concurrent.TimeUnit;public class SeleniumTest {    public static void main(String[] args) {        ChromeDriver driver = new ChromeDriver();        try {            driver.get("http://localhost:9002/login");            // 使用WebDriver接口的方法            WebElement username = driver.findElement(By.cssSelector("input[type='text']"));            username.sendKeys("zhangsan");            // 使用RemoteWebDriver类的方法(ChromeDriver继承至RemoteWebDriver)            WebElement password = driver.findElementByCssSelector("input[type='password']");            password.sendKeys("zhangsan123456");            WebElement button = driver.findElementByClassName("el-button");            button.click();            TimeUnit.SECONDS.sleep(1);            WebElement expectedElement = driver.findElementByCssSelector("#nav > div:nth-child(2) > span");            assert expectedElement.getText().equals("zhangsan");        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            driver.quit();        }    }}

以上代码分别使用sendKeys、click和getText方法进行了输入文本、点击和获取文本的操作。在点击了登录按钮后,加了1秒的等待时间,否则有可能IMS首页还未加载完成,导致无法对IMS首页上的元素进行操作。

由于以上WebElement对象仅使用了一次,因此可以简化代码,比如将:

WebElement username = driver.findElement(By.cssSelector("input[type='text']"));username.sendKeys("zhangsan");

修改为:

driver.findElement(By.cssSelector("input[type='text']")).sendKeys("zhangsan");

除了以上介绍的sendKeys、click和getText方法,WebElement对象还可以进行更多操作,比如isSelected、isEnabled和isDisplayed方法分别用于检验元素是否选中、检验元素是否启用和检验元素是否显示。

 在实际项目中,经常需要遍历一组元素,并从该组元素中找到指定需求的某个元素。比如登录IMS后,在IMS首页的列表中查找是否存在MacBook Air电脑:

List goods = driver.findElementsByCssSelector("tbody > tr");boolean exist = false;for (WebElement good : goods) {    if (good.findElement(By.className("el-table_1_column_2")).getText().equals("MacBook Air")) {        exist = true;        break;    }}assert exist;

与Python的WebElement对象不同,Java的WebElement对象并没有类似find_element_by_class_name的快捷方法,因此只能使用findElement方法来定位单个元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值