知识点1:表单验证时弹出提示框,系统无法继续自动运行怎么办?
1.系统中模拟填写表单登陆之时,只需将预期输入的用户名与密码传入函数 ,然后映射到页面对应的XPATH,模拟”点击“即可.
这里我们模拟输入“admin”,“123456”
aTest.java
assertEquals(true, this.page.login("admin", "123456 "));
a.java
public boolean login(String username, String password) {
this.driver.findElement(
By.xpath(LoginPageClass.Contants.USERNAME_XPATH)).sendKeys(
username);
this.driver.findElement(
By.xpath(LoginPageClass.Contants.PASSWORD_XPATH)).sendKeys(
password);
this.driver.findElement(
By.xpath(LoginPageClass.Contants.LOGIN_BUTTON_XPATH)).click();
但是你有没有出现这种情况?有的时候,当输入错误 或者 输入格式不对的时候可能会弹这样的一个对话框
这个时候,焦点出现在这个弹出框上,熊无法自动继续Click()操作,那么怎样才能继续呢?这里,我们使用alert()方法,让系统的焦点 找到这个弹出框
<span style="white-space:pre"> </span>boolean flag = false;
try {
Alert alert = driver.switchTo().alert();
System.out.println(alert.getText());
} catch (Exception e) {
flag = true;
}
return flag;
加上如下代码,设置一个flag,
1.如果出现弹出框,则表示出现错误,return flag(值为false),对应的测试用例中,我们让这种情况为false
assertEquals(false, this.page.login("admin", " "));
2.如果正确,则不弹出弹出框,进入异常捕捉错误 return flag=true ,对应的测试用种,我们让这种情况为trueassertEquals(true, this.page.login("admin", "123456"));
2. 级联菜单的操作
基础级联菜单一般都是这样的 <一级菜单>
<二级菜单>
<二级菜单>
<一级菜单>
<二级菜单>
<二级菜单>
对于这种级联菜单,我们最好采用Map<WebElement, List<WebElement>>的形式,前者用来存储一级菜单项,后者用来存储二级菜单项,
aClass.java
List<WebElement> firstElements = new ArrayList<WebElement>();
List<WebElement> secondElements = new ArrayList<WebElement>();
Map<WebElement, List<WebElement>> map = new HashMap<WebElement, List<WebElement>>();
通过遍历每个菜单项
int i = 1;
try {
//所有的一级菜单形成一个LIST
firstElements = this.driver.findElements(By.xpath("id('XXX')/ul/li/a"));
//遍历每个一级菜单项下的所有二级菜单
for (WebElement firstElement : firstElements) {
receiverElements = this.driver.findElements(By
.xpath("id('section-menu')/ul/li[" + i + "]/ul/li/a"));
i++;
System.out.println(hospitalElement.getText() + " : "
+ receiverElements.size());
//形成(一级菜单 ,二级菜单)map
map.put(hospitalElement, receiverElements);
}
} catch (Exception e) {
e.printStackTrace();
}
以上只是将菜单项存储到了 map对象里了,接下来要进行编写一个函数,验证这个map对象点击后出现的Iframe 里的标题,是否和预期出现的标题一致
在网页中存在IFRAME的情况下,很容易出现无法找到元素的情况,整理出如下的规律:
1.iFrame有ID 或者 name的情况
//进入id="frame1"的frame中,定位id="div1"的div和id="input1"的输入框。
dr.switchTo().frame("frame1");
dr.findElement(By.id("div1"));
dr.findElement(By.id("input1"))
2.如果一个iFrame既没有id,也没有name,通用情况
// 定位frame位置,并选取frame
WebElement frame=driver.findElement(By.xpath( "/html/body/div[2]/div[8]/div[2]/div[3]/div/div[2]/div/iframe" ));
driver.switchTo().frame(frame);
3.跳出iFrame
//跳出frame,进入default content;重新定位id="id1"的div
//跳回父IFRAME
dr.switchTo().defaultContent();
dr.findElement(By.id("id1"))
代码如下:
public boolean PageIsLoad(WebElement first, WebElement second) {
ComUtil.waitTime();
this.driver.switchTo().defaultContent();
first.click();
second.click();
String secondstr = second.getText();
this.driver.switchTo().frame("rIframe");
ComUtil.waitTime();
//看 预期标题 与 IFRAME中标题是否一致
if (this.driver
.findElement(By.xpath(DataPageClass.Contants.DATA_TITLE))
.getText().indexOf(secondstr) != -1)
return true;
else
return false;
}
aClassTest.java 在本文件中测试级联菜单是否正确
<span style="white-space:pre"> </span>@Test
public void testPageLoading1() throws InterruptedException {
ComUtil.waitTime();
Map<WebElement, List<WebElement>> map = page.getM_R_Map();
boolean bret = true;
for (WebElement element : map.keySet()) {
ComUtil.waitTime();
List<WebElement> secondElements = map.get(element);
for (WebElement secondElement : receiverElements) {
bret = bret
&& (page.receiverPageIsLoad(element, receiverElement));
}
}
assertEquals(true, bret);
}
3.级联菜单跳转至iframe之后的操作
当从级联菜单中跳转至iframe后,怎样判断正确与否呢?首先我们要明白,跳转之后,当前所在的位置是iframe而不是原来的iframe,所以要根据新的URL生成新的页面对象,通过判断URL+title的方法进行判断
// 检测查看用户页面是否加载,判断title是否相等,返回T/F
public boolean XXIsLoaded() {
//返回当前页面的父页面
this.driver.switchTo().defaultContent();
//点击级联菜单中的某一链接
this.driver.findElement(By.xpath(WarningPageClass.Contants.SHOWCKS_XXX)).click();
//跳转至新生成的iframe中
this.driver.switchTo().frame("mainIframe");
//先比较当前功能模块快URL与默认URL是否相等
if (this.driver.getCurrentUrl().indexOf(
WarningPageClass.Contants.SHOWCKS_XXX_URL) != -1) {
//若想等,则根据当前URL生成页面对象
this.driver.get(this.driver.getCurrentUrl());
//判断标题与默认标题是否相等
if (this.driver.getTitle().equals(
WarningPageClass.Contants.SHOWCKS_XXX_TITLE))
return true;
else
return false;
} else
return false;
}