有时在做web自动化时,需要对界面元素进行持续查询,当查询到后才能进行后续操作,这时就需要写个专门的方法进行操作,我这边因为之前写过判断元素是否存在的方法,所以可以在该方法的基础上进行修改。
1、首先创建一个循环然后通过xpth获取某个元素,将该元素存放在变量by中,再调用判断元素是否存在方法,如果存在则通过break退出循环,如果不存在则等待两秒后再次查找,
循环查看元素代码如下 创建一个CheckElement 类,主要通过while循环来对元素进行持续查找。
package com.xmt.tool;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
/*每两秒检测一下元素是否存在*/
public class CheckElement {
WebDriver driver;
@Test
public void checkElement(WebDriver driver, By by) throws InterruptedException {
/*调用JudgeElement 类判断元素是否存在*/
JudgeElement issueJe = new JudgeElement();
while (true) {
// 当单独筛选舆情标题时可通过该方法进行验证是否下派成功
//By byT = By.xpath("(//*[text()='详情 '])[1]");
Boolean blT = issueJe.isJudgingElement(driver, by);
//当单独筛选舆情标题时可通过该方法进行验证是否下派成功
if (blT) {//判断能否获取到已下发字段,如果该元素存在则下派成功
System.out.println("所查找的元素存在");
break;
} else {
System.out.println("所查找的元素不存在,持续查找中...");
Thread.sleep(2000);
}
}
}
}
2、在CheckElement 类中的while循环需要调用JudgeElement类中判断元素是否存在的方法,不然找不到元素会直接报错,通过该方法如果找不到元素可以直接返回false
JudgeElement类代码如下
package com.xmt.tool;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class JudgeElement {
/**
* 判断某个元素是否存在
*/
public boolean isJudgingElement(WebDriver driver, By by) {
try {
//如果存在则返回true
driver.findElement(by);
return true;
} catch (Exception e) {
//元素不存在则返回false
//System.out.println("不存在此元素");
return false;
}
}
}
3、检查元素类创建好就需要在主体类中进行调用了,调用代码如下
例如我需要持续查看界面退出登陆的按钮,就需要通过By.xpath来获取该元素,将其存储到by中,并将该参数传递要需要引用的检查方法中即CheckElement 类中的checkElement方法。
注意:driver,by都是需要在主体类中创建的参数,需要放在引用方法中使用。
/*对登陆后的某个元素进行查找,当时登陆后才进行后续操作*/
By by=By.xpath("//*[text()='退出登录']");
CheckElement ce=new CheckElement();
ce.checkElement(driver,by);