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

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

知识点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;
     }




标题基于Python的汽车之家网站舆情分析系统研究AI更换标题第1章引言阐述汽车之家网站舆情分析的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义说明汽车之家网站舆情分析对汽车行业及消费者的重要性。1.2国内外研究现状概述国内外在汽车舆情分析领域的研究进展与成果。1.3论文方法及创新点介绍本文采用的研究方法及相较于前人的创新之处。第2章相关理论总结和评述舆情分析、Python编程及网络爬虫相关理论。2.1舆情分析理论阐述舆情分析的基本概念、流程及关键技术。2.2Python编程基础介绍Python语言特点及其在数据分析中的应用。2.3网络爬虫技术说明网络爬虫的原理及在舆情数据收集中的应用。第3章系统设计详细描述基于Python的汽车之家网站舆情分析系统的设计方案。3.1系统架构设计给出系统的整体架构,包括数据收集、处理、分析及展示模块。3.2数据收集模块设计介绍如何利用网络爬虫技术收集汽车之家网站的舆情数据。3.3数据处理与分析模块设计阐述数据处理流程及舆情分析算法的选择与实现。第4章系统实现与测试介绍系统的实现过程及测试方法,确保系统稳定可靠。4.1系统实现环境列出系统实现所需的软件、硬件环境及开发工具。4.2系统实现过程详细描述系统各模块的实现步骤及代码实现细节。4.3系统测试方法介绍系统测试的方法、测试用例及测试结果分析。第5章研究结果与分析呈现系统运行结果,分析舆情数据,提出见解。5.1舆情数据可视化展示通过图表等形式展示舆情数据的分布、趋势等特征。5.2舆情分析结果解读对舆情分析结果进行解读,提出对汽车行业的见解。5.3对比方法分析将本系统与其他舆情分析系统进行对比,分析优劣。第6章结论与展望总结研究成果,提出未来研究方向。6.1研究结论概括本文的主要研究成果及对汽车之家网站舆情分析的贡献。6.2展望指出系统存在的不足及未来改进方向,展望舆情
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值