selenium2.0&WebDriver学习系列(一些需要注意的知识点)

本文介绍如何处理表单验证时出现的弹窗干扰问题,并提供了解决方案。同时,文章还详细讲解了级联菜单的选择及验证方法,包括菜单项存储、点击后iframe的切换与内容校验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点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 ,对应的测试用种,我们让这种情况为true
assertEquals(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;
     }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值