Selenium Webdriver 简易教程2

简介: Selenium Webdriver 简易教程2

高级控件


取多个对象


findElements()方法可以返回一个符合条件的元素List组,例如:

List<WebElement> elements = driver.findElements(By.tagName("input"));


层级定位

不方便定位某元素时,可以先定位其父元素,再取父元素的子元素:

WebElement element = driver.findElements(By.className("login"));
List<WebElement> elements = element.findElements(By.tagName("label"));


iframe

网页:

<html>
  <head>
    <title>FrameTest</title>
  </head>
  <body style="background-color: #990000;">
    <div id="id1">this is a div!</div>
    <iframe id="frame" frameborder="0" scrolling="no" style="left:0;position:absolute;" src="frame.html"></iframe>
  </body>
</html>


frame.html:

<html>
  <head>
    <title>this is a frame!</title>
  </head>
  <body style="background-color: #009900;">
    <div id = "div1">this is a div,too!</div>
    <label>input:</label>
    <input id = "input1"></input>
  </body>
</html>

代码:

//在default content定位id="id1"的div
dr.findElement(By.id("id1"));
//此时,没有进入到id="frame"的frame中时,以下两句会报错
dr.findElement(By.id("div1"));//报错
dr.findElement(By.id("input1"));//报错
//进入id="frame"的frame中,定位id="div1"的div和id="input1"的输入框。
dr.switchTo().frame("frame");
dr.findElement(By.id("div1"));
dr.findElement(By.id("input1"));
//此时,没有跳出frame,如果定位default content中的元素也会报错。
dr.findElement(By.id("id1"));//报错
//跳出frame,进入default content;重新定位id="id1"的div
dr.switchTo().defaultContent();
dr.findElement(By.id("id1"));



弹出窗口

//得到当前窗口的句柄
String currentWindow = dr.getWindowHandle();
//得到所有窗口的句柄
Set<String> handles = dr.getWindowHandles();
for(String handle : handles)
{
  if(currentWindow.equals(handle)) continue;
  WebDriver window = dr.switchTo().window(handle);
  //...
}



alert、confirm、prompt

  • getText() 得到它的文本值
  • accept() 相当于点击它的"确认"
  • dismiss() 相当于点击"取消"或者叉掉对话框
  • sendKeys() 输入值



Alert alert = dr.switchTo().alert();
String text = alert.getText();
System.out.println(text);
alert.dismiss();
Alert confirm = dr.switchTo().alert();
String text1 = confirm.getText();
confirm.accept();
Alert prompt = dr.switchTo().alert();
String text2 = prompt.getText();
prompt.sendKeys("jarvi");
prompt.accept();



下拉框

页面:

<div id="car-menu">
  <h2>品牌选择</h2>
  <select name="cars",id="select">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="fiat" selected="selected">Fiat</option>
    <option value="audi">Audi</option>
    <option value="bmw">BMW</option>
    <option value="Mercedes Benz ">Mercedes Benz </option>
  </select>
</div>


代码:

Select selectCar = new Select(dr.findElement(By.name("cars")));
// 通过下拉列表中选项的索引选中第二项,
selectCar.selectByIndex(4);
// 通过可见文字“audi”选中相应项,
selectengin.selectByVisibleText("audi");


拖放元素

WebElement ele = dr.findElement(By.id("item1"));
    WebElement tar = dr.findElement(By.id("drop"));
    (new Action(dr)).dragAndDrop(ele, tar).perform();


表格

下面这个实例按照原顺序输出表格中的内容:

WebElement table = driver.findElement(By.id("my-table"));
List<WebElement> rows = table.findElements(By.tagName("tr"));
for(WebElement row : rows)
{
  // 列里面有"<th>"、"<td>"两种标签,所以分开处理。
  List<WebElement> heads = row.findElements(By.tagName("th"));
  for(WebElement head : heads) 
  {
    System.out.print(head.getText());
    System.out,print(" ");
  }
  List<WebElement> cols = row.findElements(By.tagName("td"));
  for(WebElement col : cols) 
  {
    System.out.print(col.getText());
    System.out,print(" ");
  }
  System.out,println();
}



Cookies


// 增加一个name = "name",value="value"的cookie
Cookie cookie = new Cookie("name", "value");
dr.manage().addCookie(cookie);
// 得到当前页面下所有的cookies,并且输出它们的所在域、name、value、有效日期和路径
Set<Cookie> cookies = dr.manage().getCookies();
System.out.println(String
  .format("Domain -> name -> value -> expiry -> path"));
for (Cookie c : cookies)
System.out.println(String.format("%s -> %s -> %s -> %s -> %s",
c.getDomain(), c.getName(), c.getValue(), c.getExpiry(),c.getPath()));
// 删除cookie有三种方法
// 第一种 通过cookie的name
dr.manage().deleteCookieNamed("CookieName");
// 第二种 通过Cookie对象
dr.manage().deleteCookie(cookie);
// 第三种 全部删除
dr.manage().deleteAllCookies();



等待


明确等待


假设被测页面实现了这样的一种效果:点击click按钮4秒钟后,页面上会出现一个蓝色的div块。需要写一段自动化脚本去捕获这个出现的div,然后高亮它。

WebDriverWait wait = new WebDriverWait(dr, 10);
wait.until(new ExpectedCondition<WebElement>() 
{
  public WebElement apply(WebDriver d) 
  {
    return d.findElement(By.cssSelector(".blue_box"));
  }
}


代码WebDriverWait类的构造方法接受了一个WebDriver对象和一个等待最长时间(10秒)。然后调用until方法,其中重写了ExpectedCondition接口中的apply方法,让其返回一个WebElement,即加载完成的元素。默认情况下,WebDriverWait每500毫秒调用一次ExpectedCondition,直到有成功的返回,当然如果超过设定的值还没有成功的返回,将抛出异常。


隐性等待


隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。


上面的代码可改为如下代码:

1. // 设置10秒
2. dr.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);



截图

// 这里等待页面加载完成
Thread.sleep(5000);
// 下面代码是得到截图并保存在D盘下
File screenShotFile 
  = ((TakesScreenshot) dr).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenShotFile, 
                   new File("E:/软件测试课程/selenium/test.png"));



鼠标键盘模拟


单一操作

//新建一个action
Actions action=new Actions(driver);
//操作
WebElement element = dr.findElement(By.id("test"));
WebElement element1 = dr.findElement(By.id("su"));
action.sendKeys(element,"test").perform();
action.moveToElement(element1);
action.click().perform();


组合操作

(new Actions(dr)).dragAndDrop(dr.findElement(By.id(item)), target).perform();
Action dragAndDrop = builder.clickAndHold(someElement)
  .moveToElement(otherElement)
  .release(otherElement)
  .build().perform();

其他鼠标或键盘操作方法可以具体看一下API里面的org.openqa.selenium.interactions.Actions类。



其它


firefox代理

String PROXY = "localhost:8080";//如果不是本机,localhost替换成IP地址
org.openqa.selenium.Proxy proxy = new org.openqa.selenium.Proxy();
proxy.setHttpProxy(PROXY)
  .setFtpProxy(PROXY)
  .setSslProxy(PROXY);
DesiredCapabilities cap = new DesiredCapabailities();
cap.setPreference(CapabilityType.PROXY, proxy);
WebDriver driver = new FirefoxDriver(cap);


启用firefox禁用的功能

FirefoxProfile profile = new FirefoxProfile();
profile.setEnableNativeEvents(true);
WebDriver driver = new FirefoxDriver(profile);


临时指定插件

有时需要临时让启动的firefox带一个插件,如firebug,来定位问题等。首先要下载这个插件的xpi安装包。剩下的就让selenium webdriver来完成,如下:

FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.addExtension(file);
//避免启动画面
firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.10.1"); 
WebDriver driver = new FirefoxDriver(firefoxProfile);


部分内容来自SE225软件测试课程课件第8章--GUI测试工具

相关文章
|
1月前
|
数据采集 测试技术 Python
自动化淘宝秒杀:使用Selenium WebDriver的实战指南
本文详细介绍了如何利用Selenium WebDriver自动化淘宝秒杀操作,包括环境配置、代码实现及注意事项,旨在帮助读者提升秒杀成功率,同时提醒合理使用以遵守平台规则。
89 8
|
2月前
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
154 6
|
2月前
|
数据采集 Web App开发 数据可视化
Python爬虫教程:Selenium可视化爬虫的快速入门
Python爬虫教程:Selenium可视化爬虫的快速入门
|
3月前
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
448 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
3月前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
3月前
|
Web App开发 Java 测试技术
自动化测试的利器:Selenium WebDriver入门与实践
【9月更文挑战第8天】在软件开发的海洋中,测试是确保我们不会溺水的那根救生索。Selenium WebDriver,作为自动化测试的明星工具,让这根救生索更加结实可靠。本文将带你快速上手Selenium WebDriver,从基础设置到实际操作,再到实战演练,让你的开发之旅更加平稳顺畅。
|
4月前
|
JavaScript 测试技术 API
|
4月前
|
Web App开发 Java 测试技术
自动化测试的新篇章:使用Selenium WebDriver进行高效测试
【8月更文挑战第31天】 在软件开发的海洋中,自动化测试犹如一艘航船,带领着质量保证团队驶向效率与精准的彼岸。本文将揭开Selenium WebDriver的神秘面纱,通过实际案例引导您掌握这一强大的自动化测试工具。我们将从Selenium WebDriver的基础概念出发,逐步深入到代码示例,最后探讨其在现实项目中的应用场景和优势,旨在为您的软件测试之旅提供清晰的指南。
|
4月前
|
Web App开发 敏捷开发 Java
自动化测试中的神器 —— Selenium WebDriver
【8月更文挑战第31天】在软件开发的海洋里,自动化测试是那艘能带领我们驶向高效与精准彼岸的帆船。本文将带你领略Selenium WebDriver的魅力,从安装到实战,一步步解锁自动化测试的新境界。你将看到代码如何化繁为简,让重复的测试工作变得轻松愉快。让我们一起驾驭这股代码的风,向着软件质量的灯塔进发!
|
4月前
|
Web App开发 敏捷开发 测试技术
自动化测试之美:使用Selenium WebDriver进行网页功能验证
【8月更文挑战第29天】在数字时代,软件质量是企业竞争力的关键。本文将深入探讨如何通过Selenium WebDriver实现自动化测试,确保网页应用的可靠性和性能。我们将从基础设置到编写测试用例,逐步引导读者掌握这一强大的测试工具,同时分享实战经验,让测试不再是开发的负担,而是质量保证的利器。

热门文章

最新文章