文档章节

Selenium 使用要点记录<二>

嗨椒爆炒小小鱼
 嗨椒爆炒小小鱼
发布于 2014/06/04 16:36
字数 594
阅读 80
收藏 2

书接上回,最近项目里边新的release需要move to uat。然后我很光荣的被委派去给tester执行自动化测试脚本做support,让我极度遗憾的是tester不是妹子,表示本丝注定单身孤独终老的命啊。

好吧不扯淡了,在测试的过程中碰到几个问题导致程序不够稳定,脚本也被喷不够robust,我自己也喷page object模式就是shit,维护的人会shi的很难看。

1. 处理popup window问题处理的不够好?

    a. 切换到新弹出的window

        public boolean switchToWindowAttach(WebDriver driver, String windowTitle,String frameId) {
		boolean flag = false;
		try {
		        //记下当前window
			String currentHandle = getDriver().getWindowHandle();
			Set<String> handles = getDriver().getWindowHandles();
			for (String s : handles) {
				if (s.equals(currentHandle)) {
					continue;
				} else {
					driver.switchTo().window(s);
					if (driver.getTitle().contains(windowTitle)) {
					    if(!StringUtils.isBlank(frameId)){
					        //有些window可能要切换到具体的iframe才能操作内部元素
					        //getDriver().switchTo().defaultContent() 切换回外层
						driver.switchTo().frame(frameId);
						}
						flag = true;
						loggerContxt.info("Switch to window: " + windowTitle
								+ " successfully!");
						break;
					} else {
					        //如果当前循环到的window不是需要切换的window则切换回最初window
						driver.switchTo().window(currentHandle);
						continue;
					}
				}
			}
		} catch (NoSuchWindowException e) {
			loggerContxt.fatal(String.format("Failed to swith to window whose title contains:: ", windowTitle),e);
			flag = false;
		}
		return flag;
	}

    b. 关掉处理完成的popup window

/**
 * close popup window by the title name
 * @param driver WebDriver
 * @param title the title of the window need to be closed
 * @param orginalHandle the Window Handler of current window 
 * @return
 */
 protected void closePopupByTitle(WebDriver driver, String title,
			String orginalHandle) {
		for (String handle : driver.getWindowHandles()) {
			String theTitle = driver.switchTo().window(handle).getTitle();
			//if the title are samilar, then close
			if (theTitle.contains(title)) {
				driver.close();
			}
			//switch back to the original window
			if (!handle.equalsIgnoreCase(orginalHandle)) {
				driver.switchTo().window(orginalHandle);
			}
		}
	}

2. 需要等待页面的某个元素加载完成再做后续操作?

Selenium提供了2个等待的操作,一种是隐式的,另一种,er,也不知道是不是叫现实的

a.

public void waitForElementLoading(Long millis) {
	    driver.manage().timeouts().implicitlyWait(millis, TimeUnit.MILLISECONDS);
	}

b.

public WebElement waitForElementByLocator(final By locator, Long timeOut) {
		if (timeOut == null) {
			timeOut = 60L;
		}
		WebElement id = (new WebDriverWait(getDriver(), timeOut))
				.until(new ExpectedCondition<WebElement>() {
					@Override
					public WebElement apply(WebDriver d) {
						return d.findElement(locator);
					}
				});
		return id;
		
		
	}

第一个就是隐式的等待啦。第二种我自己隐式的实现了ExceptedCondition,它的apply方法应该会被回调。

ExceptedCondition提供了许多静态的方法大家可以根据自己的需求来使用。

这两种等待的区别和具体使用需要本丝研究一把,下次给大家介绍哈。额,表喷我,这准备不足真心讲不好。

© 著作权归作者所有

共有 人打赏支持
嗨椒爆炒小小鱼
粉丝 7
博文 5
码字总数 4757
作品 0
浦东
selenium系列----->脚本元素定位实例学习

Element Locators(元素定位器) Selenium Element Locator:http://blog.csdn.net/caiqcong/article/details/7542226 selenium中元素定位器的用法:http://blog.163.com/yangjianli/blog......

智能小松鼠
2015/02/17
0
0
Selenium 使用要点记录

Selenium 到底是个啥高级货? Selenium是针对Web application的一个开源的自动化测试框架,其实大家可以去Selenium官网去仔细看看哈, 大家可以顺带去提高哈自己的英语水平。当然selenium虽然...

嗨椒爆炒小小鱼
2014/06/04
0
0
Selenium使用要点记录

继续很不负责任的接上回,前一篇文章里边提到了selenium处理popup window和等待加载的scenario. 今天继续讨论一个使用selenium很容易遇到的问题和一个很不常用的问题,好吧,开始讲起: 1.se...

嗨椒爆炒小小鱼
2014/06/05
0
0
使用 Selenium 编写脚本

使用 IBM Website Monitoring 测试网站可用性,第 1 部分 使用 Selenium 编写脚本 Andrew Chan 2017 年 12 月 26 日发布 系列内容: 此内容是该系列 4 部分中的第 # 部分: 使用 IBM Websit...

Andrew Chan
2017/12/26
0
0
Selenium2(webdirver)入门之环境搭建(Java版)

最近在研究Java+selenium2的自动化测试,网上的资料比较多,自己学习的同时也顺便记录一下,加深印象的同时也方便以后回顾。 一、开发环境:   1、JDK1.6   2、Eclipse:Version: Kepler...

IT侠
2016/10/08
23
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

7 个致命的 Linux 命令

导读 如果你是一个 Linux 新手,在好奇心的驱使下,可能会去尝试从各个渠道获得的命令。以下是 7 个致命的 Linux 命令,轻则使你的数据造成丢失,重则使你的系统造成瘫痪,所以,你应当竭力避...

问题终结者
今天
0
0
设计模式:工厂方法模式(工厂模式)

工厂方法模式才是真正的工厂模式,前面讲到的静态工厂模式实际上不能说是一种真正意义上的设计模式,只是一种变成习惯。 工厂方法的类图: 这里面涉及到四个种类: 1、抽象产品: Product 2、...

京一
今天
0
0
区块链和数据库,技术到底有何区别?

关于数据库和区块链,总会有很多的困惑。区块链其实是一种数据库,因为他是数字账本,并且在区块的数据结构上存储信息。数据库中存储信息的结构被称为表格。但是,区块链是数据库,数据库可不...

HiBlock
今天
0
0
react native 开发碰到的问题

react-navigation v2 问题 问题: static navigationOptions = ({navigation, navigationOptions}) => ({ headerTitle: ( <Text style={{color:"#fff"}}>我的</Text> ), headerRight: ( <View......

罗培海
今天
0
0
Mac Docker安装流程

久仰Docker大名已久,于是今天趁着有空,尝试了一下Docker 先是从docker的官网上下载下来mac版本的docker安装包,安装很简易,就直接拖图标就好了。 https://www.docker.com/products/docker...

writeademo
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部