Selenium WebDriver在不知道元素个数的情况下,完成页面所有元素的遍历

以一个选择企业页面为例,假设事先并不知道用户登录后会有几个企业供选择,但是case又需要遍历各个企业,保证各个企业均可正常被访问,那么就可以用红色标记的方式处理。

public class ChooseEnterprise {
private WebDriver driver;
private String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();

@Before
public void setUp() throws Exception {
System.setProperty("webdriver.ie.driver", "C:\\Program Files (x86)\\Internet Explorer\\IEDriverServer.exe");
driver = new InternetExplorerDriver();
baseUrl = "http://xx.xxx.cn/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

@Test
public void testChooseEnterprise() throws Exception {

int i = 1;
int j = 1;
String str = "";
String strLast = "";

//因为不知道需要打开的链接一共有多少个,所以使用while循环,始终给一个真值,直到条件满足跳出循环
while(i!=0){

driver.get(baseUrl + "xx/xx/login.jsp");

//判断是否成功进入登录页面
try {
assertEquals("使用手机帐号登录", driver.findElement(By.cssSelector("span.fontred2")).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}

driver.findElement(By.id("usersPhone")).clear();
driver.findElement(By.id("usersPhone")).sendKeys("13800000000");

driver.findElement(By.id("usersPassword")).clear();
driver.findElement(By.id("usersPassword")).sendKeys("123456");

driver.findElement(By.cssSelector("img")).click();

//判断是否到达选择企业页面
try {
assertEquals("选择企业", driver.findElement(By.xpath("//h3")).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}

//获取属性为class=qy_bg的div元素的值

str = driver.findElement(By.xpath("(//div[@class=‘qy_bg‘])["+i+"]")).getText();

//获取属性为class=qy_bg的div最后一个元素的值
strLast = driver.findElement(By.xpath("(//div[@class=‘qy_bg‘])[last()]")).getText();

driver.findElement(By.xpath("(//a[contains(text(),‘"+str+"‘)])")).click();

//判断是否进入各企业主页
try {
assertEquals(str, driver.findElement(By.xpath("//p[2]")).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}

//点击进入个人中心的图标,进行退出操作
driver.findElement(By.cssSelector("div.r_sz > a > img")).click();
//检查是否了进入个人中心
try {
assertEquals("个人中心", driver.getTitle());
} catch (Error e) {
verificationErrors.append(e.toString());
}
//点击退出
driver.findElement(By.linkText("退 出")).click();
//检查是否成功退出
try {
assertEquals("欢迎登录网信", driver.findElement(By.cssSelector("p.fontred")).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}

//j可以统计出一共有多少个企业,供测试结果输出使用
j = i;

System.out.println(j);
System.out.println(str);

//当str的值等于strLast,表示已经到达最后一个链接,此时可跳出循环
if(strLast.equalsIgnoreCase(str)){
break;
}

i++;
}
}

@After
public void tearDown() throws Exception {
driver.quit();
}
}

时间: 2024-10-01 07:14:22

Selenium WebDriver在不知道元素个数的情况下,完成页面所有元素的遍历的相关文章

(java)selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出

selenium webdriver学习---实现简单的翻页,将页面内容的标题和标题链接取出: 该情况适合能能循环page=1~n,并且每个网页随着循环可以打开的情况, 注意一定是自己拼接的url可以打开,如:http://ask.testfan.cn/articles?page=15,就可以翻到文章分类的第15页: import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.u

以过滤器(filter)为例,实现不同登录情况下的页面跳转

以过滤器(filter)为例,实现不同登录情况下的页面跳转 登录登录账户正确,进入主页. 登录账户错误,跳转到错误页面. 用户注销之后,用登录成功的网址再次登录,提示没有登录权限. 用户登录之后向Session中放入用户的数据 进入主页的时候要判断用户是否已经登陆:要求:在过滤器中实现 补充:还用到了一个提出常量的方法. 原文地址:https://www.cnblogs.com/WZ-BeiHang/p/12616949.html

C++数据个数未知情况下的输入方法

我们经常需要输入一串数,而数据个数未知.这时候就不能以数据个数作为输入是否结束的判断标准了. 这种情况下,我们可以用以下两种方法输入数据. 方法一:判断回车键(用getchar()=='\n'即可判断) 1 //以整数为例 2 #include <iostream> 3 #include <vector> 4 #include <algorithm> 5 using namespace std; 6 7 int main(){ 8 vector<int> v

IE 中单元格的 colspan 属性在某些情况下会影响 TABLE 元素的自动布局

今天在写一个jsp页面时,遇到一个如下的问题:在一个table中写了如下内容,table中定义了4列,在firefox中能正常显示,而在ie8中,显示不正常, 如下如图1:第二,三,四列宽度发生变化,和代码中定义的宽度显示不一致, 图1(IE8): 图2(firefox): 代码如下: 1 <table id="cont2"> 2 <tbody> 3 <tr> 4 <td class="ct_t"> 5 是否分包<

在不知道json格式的情况下如何使用cjson进行解析

假设我们有一个json字符串,但是我们不知道这个json的组织方式,那么如何进行解析呢,下面就给一个小例子. 1.我们的json串如下: { "aStr": "aaaaaaa", "subobject_1": { "bStr": "bbbbbbb", "subobject_2": { "cStr": "ccccccc" } }, "xSt

selenium测试,有弹框的情况下无法截屏

原因是alert弹框不在DOM中,是一个独立的窗口,此时可以用robot模拟键盘截屏,如下: Image=newRobot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize())); ImageIO.write(image, "png", new File(dirName + File.separator + fileName + ".png")); 原文地址:

JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法

$(function(){ //遍历获取的input元素对象数组,绑定click事件 var len = $("input[type='file']").length; for(var i = 0; i < len; i++){ $("input[type='file']").eq(i).click(function(){ $(this).next().val(""); $(this).next().hide(); $(this).css(

jQuery获取元素上一个、下一个、父元素、子元素

jQuery.parent(expr),找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children(expr),返回所有子节点,这个方法只会返回直接的孩子节点,不会返回所有的子孙节点 jQuery.contents

jQuery获取某元素下所有的链接元素

jQuery获取某元素下所有的链接元素: 在某些情况下需要获得某些元素下的所有链接,下面就介绍一下如何实现此效果. 代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title>蚂蚁部落&l