您的位置:首页 > 其它

Selenium WebDriver Demo

2015-11-05 16:33 417 查看

1 实现的功能和环境介绍

使用Selenium WebDriver做了简单的Demo,功能如下。

- 测试对象:基于Web的Foglight产品

- 测试步骤:使用Chrome登录Foglight,进入到CreateRule页面,创建新的一条Rule,然后退出浏览器。

- CreateRule的界面如下:



2 碰到的问题

运行测试程序时提示IllegalStateException

Exception in thread “main” java.lang.IllegalStateException: The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html

解决方案:

设置chromedriver的系统参数,告诉程序运行时,可以找到对应的ChromeDriver。

代码如下:

System.setProperty("webdriver.chrome.driver", "D:\\EclipseWorkspace\\SeleniumHQ\\selenium-lib\\chromedriver.exe");


运行时,提示Chrome版本太低

解决方案:升级Chrome版本。由于本机Browser可以翻墙,但是Chrome官网提供的是一个下载器,用于下载最新的Chrome版本。如果要想直接下载安装包,可以使用如下链接:

https://www.google.com/chrome/browser/desktop/index.html?standalone=1


注意:加了standalone参数。这样方式下载,需要浏览器可以翻墙。

查找Create Rule页面的元素时,通过Firebug可以找到,但是无法通过程序找到

解决方案:Create Rule使用了iFrame来实现,会导致使用程序查找时,默认在Top Window中查找。如果要在Create Rule中查找,需要先切换到iFrame元素中。代码如下:

//由于Create Rule页面是通过iFrame框架实现的。所以需要找到iframe的节点后,切换到iframe的页面去操作
WebElement frameNode = driver.findElement(By.xpath("//iframe"));
driver.switchTo().frame(frameNode);


3 Todo List

要完整的走一个自动化的流程,还需要提供如下功能:

自动安装和启动Foglight:可以使用ibm的staf

使用xUnit来管理test case:Junit3/Junit4/test ng

生产可读性强的report报告

操作步骤代码如下:

public void testCreateRule(){
//调整到Create Rule页面
WebElement selectNode;
selectNode = driver.findElement(By.xpath("//div[@nodeid='system:administration']/img"));
selectNode.click();
waitTime(1000);

selectNode = driver.findElement(By.xpath("//div[@nodeid='system:administration_rulesnotifications']/img"));
selectNode.click();
waitTime(1000);

selectNode = driver.findElement(By.xpath("//div[@nodeid='system:administration_rulesnotifications.1']/span"));
selectNode.click();
waitTime(5000);

//由于Create Rule页面是通过iFrame框架实现的。所以需要找到iframe的节点后,切换到iframe的页面去操作
WebElement frameNode = driver.findElement(By.xpath("//iframe"));
driver.switchTo().frame(frameNode);

//填写数据
WebElement inputNode;
inputNode = driver.findElement(By.xpath("//input[@id='myRuleName']"));
inputNode.sendKeys("testRule");
inputNode = driver.findElement(By.id("nodomain"));
inputNode.click();
waitTime(2000);

WebElement NextButton;
NextButton = driver.findElement(By.id("nextButton"));
if(NextButton.isEnabled()){
NextButton.click();
}else{
waitTime(5000);
NextButton.click();
}

WebElement condition = driver.findElement(By.id("titlebar_fire"));
condition.click();

condition = driver.findElement(By.xpath("//textarea[@id='condition1']"));
condition.sendKeys("true");
waitTime(1000);

condition = driver.findElement(By.xpath("//span[@title='Validate Condition']/img"));
condition.click();
waitTime(1000);

NextButton = driver.findElement(By.id("nextButton"));
NextButton.click();
waitTime(2000);

WebElement Schedules = driver.findElement(By.xpath( "//optgroup[@label='--- Available Schedules ---']/option[18]"));
Schedules.click();
waitTime(1000);

Schedules = driver.findElement(By.xpath("//input[@value='Add>>'][1]"));
Schedules.click();
waitTime(1000);

WebElement finish = driver.findElement(By.id("finishButton"));
if(finish.isEnabled()){
finish.click();
}
//切换到父页面后,继续操作。否则可能会导致后面的操作找不到节点
driver.switchTo().parentFrame();

}


4 Reference

http://staf.sourceforge.net/ STAF

https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver ChromeDriver
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  chrome selenium