selenium常用操作
来源:互联网 发布:西门子s7300编程软件 编辑:程序博客网 时间:2024/05/16 10:37
selenium文档
Selenium IDE界面说明:
1.文件:创建、打开和保存测试案例和测试案例集;编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令;Options: 用于设置seleniunm IDE
2. 用来填写被测网站的地址
3. 速度控制:控制案例的运行速度
4. 运行所有:运行一个测试案例集中的所有案例
5. 运行:运行当前选定的测试案例
6. 暂停/恢复:暂停和恢复测试案例执行
7. 单步:可以运行一个案例中的一行命令
8. 录制:点击之后,开始记录你对浏览器的操作
9. 案例集列表
10. 测试脚本;table标签:用表格形式展现命令及参数;source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示
11. 查看脚本运行通过/失败的个数
12. 当选中前命令对应参数
13. 日志:当你运行测试时,错误和信息将会自定显示;参考:当在表格中输入和编辑selenese命令时,面板中会显示对应的参考文档;UI元素:参考帮助菜单中的;Rollup:暂无
selenium中close和quit的区别
close:表示关闭当前页面(窗口)
quit:表示退出浏览器
元素定位方法:
定位方法
Java语言实现实例
id 定位
driver.findElement(By.id(“id的值”));
name 定位
diver.findElement(By.name(“name的值”));
链接的全部文字定位
driver.findElement(By.linkText(“链接的全部文字”));
链接的部分文字定位
driver.findElement(By.partialLinkText(“链接的部分文字”));
css 方式定位
driver.findElement(By.cssSelector(“css表达式”));
xpath 方式定位
driver.findElement(By.xpath(“xpath表达式”));
Class 名称定位
driver.findElement(By.className(“class属性”));
TagName 标签名称定位
driver.findElement(By.tagName(“标签名称”));
Jquery方式
Js.executeScript(“return jQuery.find(“jquery表达式”)”)
1.通过ID查找元素:By.id()
以百度主页为例:搜索框的HTML示例代码如下,它的ID为kw
<input type="text"class="s_ipt" name="wd" id="kw"maxlength="100" autocomplete="off">
“百度一下”搜索按钮元素的HTML示例代码如下,它的ID为su
<input type="submit"value="百度一下"id="su" class="btn self-btn bg s_btn">
selenium/webdriver中通过ID查找元素的java实例代码:
Webdriver driver = new FirefoxDriver();
driver.get(“https://www.baidu.com/”);
WebElement searchBox = driver.findElement(By.id(“kw”));
searchBox.sendKeys(“小坦克 博客园”);
WebElement searchButton = driver.findElement(By.id(“su”));
searchButton.submit();
driver.close();
2. 通过Name查找元素:By.name()
以豆瓣网的主页搜索框为例, 其搜索框的HTML代码如下, 它name是: q
<input type="text" maxlength="60"size="12" placeholder="书籍、电影、音乐、小组、小站、成员" name="q" autocomplete="off">
WebDriver中通过name查找豆瓣主页上的搜索框的Java代码如下:
WebDriver driver = newFirefoxDriver();
driver.get("https://www.douban.com/");
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("小坦克");
searchBox.submit();
3. 通过TagName查找元素: By.tagName()
通过tagName来搜索元素的时候,会返回多个元素. 因此需要使用findElements()
WebDriver driver = newFirefoxDriver();
driver.get("http://www.cnblogs.com");
List<WebElement> buttons =driver.findElements(By.tagName("div"));
System.out.println("Button:" + buttons.size());
注意: 如果使用tagName, 要注意很多HTML元素的tagName是相同的,
比如单选框,复选框, 文本框,密码框.这些元素标签都是input. 此时单靠tagName无法精确获取我们想要的元素, 还需要结合type属性,才能过滤出我们要的元素
WebDriver driver = newFirefoxDriver();
driver.get("http://www.cnblogs.com");
List<WebElement> buttons = driver.findElements(By.tagName("input"));
for (WebElement webElement : buttons) {
if (webElement.getAttribute("type").equals("text")){
System.out.println("input text is :" + webElement.getText());
}
}
3. 通过ClassName 查找元素 By.className
以淘宝网的主页搜索为例, 其搜索框的HTML代码如下: class="search-combobox-inpu
t"
<input autocomplete="off" autofocus="true"accesskey="s" aria-label="请输入搜索文字" name="q" id="q"class="search-combobox-input" aria-haspopup="true"aria-combobox="list"
role="combobox" x-webkit-grammar="builtin:translate"tabindex="0">
WebDriver driver = new FirefoxDriver();
driver.get("http://www.taobao.com");
Thread.sleep(15000);
WebElement searchBox =driver.findElement(By.className("search-combobox-input"));
searchBox.sendKeys("羽绒服");
searchBox.submit();
注意:使用className 来进行元素定位时,有时会碰到一个
4. 通过LinkText查找元素 By.linkText();
直接通过超链接上的文字信息来定位元素:例如
<ahref="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fw
ww.baidu.com%2F" name="tj_login" class="lb"onclick="return false;">登录</a>
实例代码:
WebDriverdriver = new FirefoxDriver();
driver.get("http://www.baidu.com");
WebElement loginLink = driver.findElement(By.linkText("登录"));
loginLink.click();
5. 通过PartialLinkText查找元素 By.partialLinkText()
此方法是上一个方法的加强版,单你只想用一些关键字匹配的时候,可以使用这个方法,通过部分超链接文字来定位元素
HTML 代码如下
WebDriverdriver = new FirefoxDriver();
driver.get("http://www.baidu.com");
WebElement loginLink = driver.findElement(By.partialLinkText("登"));
loginLink.click();
注:用这种方法定位时,可能会引起的问题是,当你的页面中不知一个超链接包含“等”时, findElement方法只会返回第一个查找到的元素,而不会返回所有符合条件的元素;如果你想要获得所有符合条件的元素,还是只能用findElements方法
6. xpath定位
{ xpath 这种定位方式,webdriver会将整个页面的所有元素进行扫描以定位我们所需要的元素,这是个非常费时的操作,如果脚本中大量使用xpath做元素定位的话, 脚本的执行速度可能会稍慢 }
绝对路径和相对路径的区别----绝对路径 以"/" 开头, 让xpath 从文档的根节点开始解析
-----相对路径 以"//"开头, 让xpath 从文档的任何元素节点开始解析
7. XPATH元素定位(升级版)
1)通过绝对路径定位
By.xpath(“html/body/div/form/input”);
2)通过相对路径定位
By.xpath(“//input//div”);
3)通过元素索引定位
By.xpath(“//input[4]”);
4)使用xpath+节点属性定位(结合第2、第3中方法可以使用)
By.xpath(“//input[@id=’kw1’]”);
By.xpath(“//input[@type=’name’ and @name=’kw1’]”);
5)使用部分属性值匹配
By.xpath(“//input[start-with(@id, ’nice’)]”);
By.xpath(“//input[ends-with(@id, ‘很漂亮’)]”);
By.xpath(“//input[contains(@id, ‘那么美’)]”);
6)使用前集中方法的组合
By.xpath(“//input[@id=’kw1’]//input[start-with(@id, ‘nice’)]/div[1]/form[3]”);
常见web UI 元素操作 及API使用
{ http://www.cnblogs.com/TankXiao/p/5252754.html}
1.链接(link)
<div>
<p>链接 link</p>
<a href="www.cnblogs.com/tankxiao">小坦克</a>
</div>
链接操作:
//找到链接
WebElement link1 = driver.findElement(By.linkText(“小坦克”));
WebElement link1 = driver.findElement(By.partialLinkText(“坦克”));
//点击链接
link1.click();
2.输入框textbox
<div>
<p>输入框 testbox</p>
<input type="text" id="usernameid"value="username" />
</div>
输入框操作:
//找到元素
WebElement element = driver.findElement(By.id(“usernameid”));
//在输入框中输入内容
element.sendKeys(“test111111”);
//清空输入框
element.clear();
//获取输入框的内容
element.getAttribute(“value”);
3.按钮(Button)
<div>
<p>按钮</p>
<input type="button" value=”添加” id=”proAddItem_0” />
</div>
//找到元素
String xpath = “//path[@value=’添加’]”;
WebElement addButton = driver.findElement(By.xpath(xpath));
//点击按钮
addButton.click();
//判断是否enable
addButton.isEnabled();
4.下拉选择框(Select)
<div>
<p>下拉选择 Select</p>
<select id=”proAddItem_kind” name=”kind”>
<option value="1">电脑硬件</option>
<option value="2">房产</option>
<option value="18">种类AA</option>
<option value="19">种类BB</option>
< option value="20">种类BB</ option >
< option value="21">种类CC</ option >
</select>
</div>
下拉选择框的操作:
//找到元素
Select select = new Select(driver.findElement(By.id(“proAddItem_kind”)));
//选择对应的选项,index 从0开始的
select.selectByIndex(2);
select.selectByValue(“18”);
select.selectByVisibleText(“种类AA”);
//获取所有的选项
List<WebElement> options = select.getOption();
for(WebElement webElement : option){
System.out.println(webElement.getText());
}
5.单选按钮(RadioButton)
<div>
<p>单选项Radio Button</p>
<inputtype="radio" value="Apple" name="fruit>"/>Apple
<inputtype="radio" value="Pear" name="fruit>" /> Pear
<inputtype="radio" value="Banana" name="fruit>"/> Banana
<inputtype="radio" value="Orange" name="fruit>"/> Orange
</div>
单选项元素的操作
//找到元素
String xpath = “//input[@type=’radio’][@value=’Apple’]”;
WebElement apple = driver.findElement(By.xpaty(xpath));
//选择某个元素
applie.click();
//判断某个单选框是否已经被选择
BooleanisAppleSelect = apple.isSelected();
//获取元素属性
apple.getAttribute(“value”);
6.多选框
<div>
<p>多选项Radio Button</p>
<inputtype="radio" value="Apple" name="fruit>"/>Apple
<inputtype="radio" value="Pear" name="fruit>" /> Pear
<inputtype="radio" value="Banana" name="fruit>"/> Banana
<inputtype="radio" value="Orange" name="fruit>"/> Orange
</div>
多选框的操作和单选框一模一样的
操作浏览器
1.浏览器最大化、前进、多退、刷新
public static void testBrowser(WebDriverdriver) throws Excepotion{
driver.get(“http://www.cnblogs.com/tankxiao”);
Thread.sleep(5000);
//浏览器最大化
driver.manage().window().maximize();
driver.navigate().to(“http://www.baidu.com”);
//刷新浏览器
driver.naviget.refresh();
//浏览器后退
driver.navigate.back();
//浏览器前进
driver.navigate.forward();
//浏览器退出
driver.quit();
}
2.截图操作
public static void testScreenShot(WedDriverdriver) throws Exception{
driver.get(“http://www.baidu.com”);
File srcFile = ((TakesScreenshot)driver).getSreenshotAs(OutputType.FILE);
/**
* 利用FileUtils工具类的copyFile()方法保存getScreenshotAs()返回的文件对象
*new File()第一个参数表示截图储存路径;如果该文件在本工程目录下,只需要填写文件夹名字即可;如果该文件夹没有在该工程目录下,则需要填写完成的路径
*new File()第二个参数表示截图保存的文件名
*/
FileUtils.copyFile(srcFile,new File("snapshot", System.currentTimeMillis() + ".png"));
}
3.模拟鼠标操作
public static voidrightClickMouse(WebDriver driver){
driver.get(“http://www.baidu.com”);
Action action = new Action(driver);
action.contextClick(driver.findElement(By.id(“kw”))).perform();
}
4.杀掉Windows浏览器进程
public static void killProcess(){
//killfirefox
WindowsUtils.tryToKillByName(“firefox.exe”);
//kill IE
WindowsUtils.tryToKillByName(“iexplore.exe”);
//kill chrome
WindowsUtils.tryToKillByName(“chrome.exe”);
}
操作弹出对话框
1.对话框类型
1)警告框:用于提示用户相关信息的验证结果, 错误或警告等
2)提示框:用于提示用户在当前对话框中输入数据,一般需要用户单击取消或者确认按钮
3)确认框:用于提示用户确认或者取消某个操作,一般需要用户单击取消或者确认按钮
操作对话框代码:
public static void testAlert(WebDriverdriver)
{
String url="http://sislands.com/coin70/week1/dialogbox.htm";
driver.get(url);
WebElement alertButton =driver.findElement(By.xpath("//input[@value='alert']"));
alertButton.click();
Alert javascriptAlert = driver.switchTo().alert();
System.out.println(javascriptAlert.getText());
javascriptAlert.accept();
}
public static void testPrompt(WebDriver driver) throws Exception
{
String url="http://sislands.com/coin70/week1/dialogbox.htm";
driver.get(url);
WebElement promptButton =driver.findElement(By.xpath("//input[@value='prompt']
"));
promptButton.click();
Thread.sleep(2000);
Alert javascriptPrompt = driver.switchTo().alert();
javascriptPrompt.sendKeys("This is learning Selenium");
javascriptPrompt.accept();
System.out.println(javascriptPrompt.getText());
javascriptPrompt=driver.switchTo().alert();
javascriptPrompt.accept();
Thread.sleep(2000);
promptButton.click();
javascriptPrompt=driver.switchTo().alert();
javascriptPrompt.dismiss();
Thread.sleep(2000);
javascriptPrompt=driver.switchTo().alert();
javascriptPrompt.accept();
}
public static void testConfirm(WebDriver driver) throws Exception
{
String url="http://sislands.com/coin70/week1/dialogbox.htm";
driver.get(url);
WebElement confirmButton =driver.findElement(By.xpath("//input[@value='confirm']
"));
confirmButton.click();
Thread.sleep(2000);
Alert javascriptConfirm = driver.switchTo().alert();
javascriptConfirm.accept();
Thread.sleep(2000);
javascriptConfirm = driver.switchTo().alert();
javascriptConfirm.accept();
}
2.原理
在代码里,通过Set<String>allWindowsId = driver.getWindowHandles();来获取到所有弹出浏览器的句柄,然后遍历,使用swithcto.window(newwindow_handle)方法。就可以定位到新的窗口
3.测试页面的HTML
<html>
<head>
<title>Alert</title>
</head>
<body>
<input id = "alert" value = "alert" type ="button" onclick = "alert('欢迎!请按确认继续!');"/>
<input id = "confirm" value = "confirm" type ="button" onclick = "confirm('确定吗?');"/>
<input id = "prompt" value = "prompt" type ="button" onclick = "var name = prompt('请输入你的名字:','请输入 你的名字'); document.write(name) "/>
</body>
</html>
4.Java代码
public static voidtestMultipleWindowsTiltle(Webdriever driver) throws Exception{
String url = “E:\\StarthFolder\\huoli_28@hotmail.com\\Stash\\Tank-MonkeyProject\\Selenium
WebDriver\\AllUIElement.html”;
driver.get(url);
//获取当前窗口的句柄
String parenWindowId =driver.getWindowHandle();
System.out.println(“driver.getTitle():”+ driver.getTitle());
WebElement button =driver.findElement(By.xpath(“//input[@value=’打开窗口’]”));
button.click();
Set<String>allWindowId = driver.getWindowHandles();
//获取所有打开的窗口的句柄
for(String windowId :allWindowsId){
if(driver.switchTo().window(windowId).getTitle().contains(“博客园”)){
driver.switchTo().window(windowId);
break;
}
}
System.out.println(“driver.getTitle():” + driver.getTitle());
//再次切换回原来的父窗口
driver.switchTo().window(parentWindowId);
System.out.println(“parentWindowId:” + driver.getTitel());
}
driver.switchTo().alert() 这句可以得到alert\confirm\prompt对话框的对象
. getText() 得到它的文本值
. accept() 相当于点击它的"确认"
. dismiss() 相当于点击"取消"或者叉掉对话框
. sendKeys() 输入值
智能等待页面加载完成
实例:set_timeout.html 下面的html 代码, 点击click 按钮5秒后,页面上会出现一个红色的div快,我们需要写一段自动化脚本智能的去判断这个div是否存在,然后把这个div 然后高亮
<html>
<head>
<title>Set Timeout</title>
<style>
.red_box {background-color:red; width = 20%; height: 100px; border: none;}
</style>
<script>
function show_div(){
setTimeout("create_div()", 5000);
}
function create_div(){
d =document.createElement('div');
d.className ="red_box";
document.body.appendChild(d);
}
</script>
</head>
<body>
<button id = "b" onclick ="show_div()">click</button>
</body>
</html>
1.隐式等待
WebDriver driver = new FireFfoxDriver();
driver.get(“file:///C:/Users/Tank/Desktop/set_timeout.html”);
driver.manage().timeouts().implicitlyWait(20, TimeUnitl.SENCONDS);
//等待10s,如果10s元素还不存在,就会抛出异常
WebElement element = driver.findElement(By.cssSelector(“.red_box”));
((JavascriptExecutor)driver).executeScript(“argument[0].style.border= \"5pxsolid yellow\"”, element);
2.显示等待
等待的条件
WebDriver方法
页面元素是否在页面上可用和可被单击
elementToBeClickable(By locator)
页面元素处于被选中状态
elementToBeSelected(WebElement element)
页面元素在页面中存在
presenceOfElementLocated(By locator)
在页面元素中是否包含特定的文本
textToBePresentInElement(By locator)
页面元素值
textToBePresentInElementValue(By locator, java.lang.String text)
标题 (title)
titleContains(java.lang.String title)
只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑;如果超过设定的最大显式等待时间阈值,这测试程序会抛出异常。
public static void testWait2(WebDriver driver){
driver.get(“E:\\StashFolder\\huoli_28@hotmail.com\\Stash\\Tank-MoneyProject\\浦东软件园培训中心\\我的教材\\SeleniumWebdriver\\set_timeout.html”);
WebDriver wait = newWebDriverWait(driver ,30);
wait.until(ExpectedConditons.presenceOfElementLocated(By.cssSelector(“.red_box”)));
WebDriver element =driver.findElement(By.cssSelector(“.red_box”));
((JavascriptExcutor)driver).excuteScript(“argument[0].style.border = \"5pxsolid yellow\"", element);
}
鼠标操作
点击鼠标左键:
Actions action = new Actions(driver);
action.click(); //在当前位置点击左键
action.click(driver.findElement(By.id(“”))); //在指定位置单机左键
点击鼠标右键:
Actions action = new Actions(driver);
action. contextClick (); //在当前位置点击右键
action. contextClick (driver.findElement(By.id(“”))); //在指定位置点击右键
双击鼠标:
Actions action = new Actions(driver);
action. doubleClick(); //在当前位置点击左键
action. doubleClick (driver.findElement(By.id(“”))); //再指定位置双击
拖拽动作
Actions action = new Actions(driver);
action. dragAndDrop (source,target); //将source元素拖放到target元素的位置
action. doubleClick (source, xOffset, yOffset); //将source元素拖放到(xOffset, yOffset)位置,其中xOffset为横坐标,yOffset为纵坐标
鼠标悬停:
Actions action = new Actions(driver);
action.clickAndHold(); //在当前位置悬停
action.clickAndHold(onElement); //鼠标悬停在 onElement 元素的位置
鼠标移动:
Actions action = new Actions(driver);
action.moveToElement(toElement); //将鼠标移到 toElement
action.moveToElement(toElement,xOffset,yOffset) //将鼠标移到元素 toElement 的 (xOffset,yOffset) 位置
action.moveByOffset(xOffset,yOffset); //以鼠标当前位置或者 (0,0) 为中心开始移动到(xOffset, yOffset) 坐标轴
模拟键盘操作
对于键盘的模拟操作,Actions 类中有提供keyUp(theKey)、keyDown(theKey)、sendKeys(keysToSend) 等方法来实现
Actions action = new Actions(driver);
action.sendKes(Keys.TAB); //模拟按下并释放TAB键
action.sendKeys(Keys. CONTROL); //模拟按下并释放CONTROL键
使用Robot类来操作Keys
使用Robot需要导入两个java包:java.awt.AWTException、java.awt.Robot
以下代码未使用实例代码
一下示例代码是模拟键盘实现复制、粘贴功能
模拟键盘操作的另一种方式:通过sendKeys(Keys.CONTROL,“a”)方式模拟复制粘贴
selenium处理页面滚动
利用webdriver执行脚本直接滚动到指定坐标位置
滚动到指定元素位置
移动element“顶端”与当前窗口的“顶部”对齐:
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element);
移动element“底端”与当前窗口的“底部”对齐:
((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(false);", element);
滚动到目标元素的纵坐标位置
滚动到页面底部、顶部
获取页面body的高、宽度
selenium处理嵌入页面(frame技术)
实例网站:http://data.pharmacodia.com/web/homePage/index?ns=1&ts=1&str=YWSJ
在报错信息里面看到没有找到该元素时,首先检查是否元素定位错误,再次就是网页使用了frame嵌入技术。识别是否使用了frame技术,可以使用Firefox浏览器的firepath插件(先要安装firebug插件)查看,选中该元素右键选择firepathà如果左上角显示iframe标签则表示使用了frame技术,如果显示的时To Window则没有使用frame技术
selenium对窗口window的处理
窗口切换
selenium中提供了一个switchTo().window(handle)的方法来处理窗口的切换。
思路:①获取当前窗口的句柄(currenthandle)和当前所有窗口的句柄(allhandle)②把allhandle存入set集合中 ③用for循环去判断当前窗口是否是目标窗口,是则切换。
示例代码:(为了使用方便,先封装切换窗口的方法,使用过程调用即可[提供两种封装方法])
完整的示例:
selenium中window.open()和click()点击链接的区别:
使用window.open()点击当前页面链接,浏览器会new一个tab,即打开一个新的窗口
使用click()点击当前页面链接,浏览器会在当前窗口跳转到新的页面,而不会new一个tab,即不会打开新的窗口
当然,点击链接后会不会new一个tab,也是有网页本身决定,如果有target属性,则会new一个tab
下拉处理页面加载
可以通过sendKeys(Keys.DOWN)方法下拉(模拟键盘操作)加载页面
- Selenium常用操作
- selenium常用操作
- Selenium Webdriver常用JS操作
- selenium常用控件的操作
- Selenium的一些常用操作
- 使用selenium操作PhantomJS的常用操作
- 用python玩转selenium:3-selenium常用操作
- 用python玩转selenium:3-selenium常用操作
- python selenium 网页对象常用操作
- Selenium-java-web常用操作---2
- Python爬虫利器之selenium常用操作
- Selenium Python自动化测试学习知识积累-页面常用操作
- selenium webdriver常用操作方法
- Selenium常用的方法
- selenium 常用函数
- Selenium常用函数封装
- selenium封装常用方法
- selenium常用小技巧
- poj1149 PIGS
- 报表导出测试 check point
- Mac下配置Gradle
- 快速简单的了解java List,Map,List<Map>的用法
- 几道JAVA和分布式系统面试题总结
- selenium常用操作
- 微信扫一扫功能的实现
- 设备 naa.6006016004102900751132ac8de3e211 性能降低。
- Log4j控制台输出乱码问题
- 大数据看美食 | 大众点评餐厅数据分析报告!
- [杜教筛] BZOJ3512. DZY Loves Math IV
- APP提现
- PHP的包依赖管理工具Composer
- MySQL5.7 添加用户、删除用户与授权