今天,总结一下selenium怎么操作web页面常见的元素。

主要有:

上传

alter dialog

prompt dialog

confirm dialog

select list

radio box

input box

checkBox

测试页面如下:

 View Code

selenium 最核心的技巧是WebElement的识别和定位

selenium总共有八种定位方法

By.id()  通过id定位

By.name()  通过name 定位

By.xpath() 通过xpath定位

By.className() 通过className定位

By.cssSelector() 通过CSS 定位

By.linkText() 通过linkText

By.tagName() 通过tagName

By.partialLinkText() 通过匹到的部分linkText

目前,使用比较多的是cssSelector和xpath,因为一个页面中Id name className tagName LinkText等比较容易重复 不容易 确定唯一

接下来会有具体的例子来演示如何定位

上传文件

一般,上传页面如果是input,像这样的,可以使用sendkeys

首先,这里使用xpath定位到该元素,然后使用sendKeys即可,sendKeys send你要上传的文件的绝对路径

1 //td/input[@type='file']

也可以使用cssSelector,关于xpath和cssSelector更多知识,以后会做一些专题

1 td>input[type='file']

如何验证你写的xptah/cssSelector是正确的呢?

有以下几种方法:

F12 ,使用浏览器的console  ,xpath使用$x()  function,css使用    $() function

使用第三方插件firebug

使用selenium IDE

alert对话框

细分三种,Alert,prompt,confirm

Selenium有以下方法:

Alert alert =driver.switchTo().alert();

1. driver.switchTo().alert();  获取alert

2. alert.accept(); 点确定

3. alert.dismiss(); 点取消

4. alert.getText();获取alert的内容

select菜单

select也是比较常见的,selenium封装了以下方法

创建select

WebElement selector = driver.findElement(By.id("Selector"));

Select select = new Select(selector);

选择select的option有以下三种方法

selectByIndex(int index) 通过index

selectByVisibleText(String text) 通过匹配到的可见字符

selectByValue(String value) 通过匹配到标签里的value

WebElement selector = driver.findElement(By.id("Selector"));

Select select = new Select(selector);

select.selectByIndex(3);

select.selectByVisibleText("桃子");

select.selectByValue("apple");

输入框

输入框就比较简单了,不再多说

sendKeys()输入内容

clear()  清空

单选框(RadioBox)

单选框可以有获取状态,是否被选中

radioBox.isSelected();

是否enable

radioBox.isEnabled()

使用click方法选中

复选框(checkBox)

复选框和单选框基本差不多,此处略

超链接

超链接比较常见,一般都是标签a

Copyright 2015 to be crazy

一般使用click方法

这里我们了解一下浏览器打开超链接时,如果是chrome,点超链接的同时按下Ctrl会打开新标签,按下shift会打开新窗口

这里单讲一下不同窗口切换.

selenium有两个关于获取窗口的方法:

1. driver.getWindowHandle();  返回的是字符串,获取当前窗口的句柄

2. driver.getWindowHandles(); 返回的是 Set ,获取所有窗口

如果你想在窗口之间切换

driver.switchTo().window(window);

小技巧: 如何滚动到你定位的元素

这里使用java script

// scroll to mylink

JavascriptExecutor scroll = (JavascriptExecutor) driver;

scroll.executeScript("arguments[0].scrollIntoView();", myLink);

接下来是所有测试代码:

package com.packt.webdriver.chapter1;

import java.util.List;

import java.util.Set;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.Alert;

import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.Keys;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.interactions.Actions;

import org.openqa.selenium.support.ui.Select;

import org.testng.Assert;

import com.packt.webdriver.chapter3.DriverFactory;

/**

* this method is for deal with base web elements

*

* @author Young

*

*/

public class dealWithElements {

public static void main(String[] args) throws Exception {

String URL = "file://demo.html";

String chromdriver="E:\\chromedriver.exe";

System.setProperty("webdriver.chrome.driver", chromdriver);

ChromeOptions options = new ChromeOptions();

// options.addExtensions(new File(""));

DesiredCapabilities capabilities = DesiredCapabilities.chrome();

capabilities.setCapability("chrome.switches",

Arrays.asList("--start-maximized"));

options.addArguments("--test-type", "--start-maximized");

WebDriver driver=new ChromeDriver(options);

driver.get(URL);

// max size the browser

driver.manage().window().maximize();

driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

WebElement upload = driver.findElement(By

.xpath("//td/input[@type='file']"));

upload.sendKeys("C:/Users/Young/Desktop/demo.html");

Assert.assertTrue(upload.getAttribute("value").contains("demo"));

// for alert

WebElement clickOnAlert = driver.findElement(By

.xpath("//td/input[@name='alterbutton']"));

clickOnAlert.click();

delay(2);

// get alert

Alert alert = driver.switchTo().alert();

Assert.assertTrue(alert.getText().contains("alert"));

// click alert ok

alert.accept();

delay(2);

// for prompt

WebElement clickOnPrompt = driver.findElement(By

.xpath("//td/input[@name='promptbutton']"));

clickOnPrompt.click();

delay(2);

Alert prompt = driver.switchTo().alert();

prompt.sendKeys("I love Selenium");

prompt.accept();

delay(5);

Alert afterAccept = driver.switchTo().alert();

Assert.assertTrue(afterAccept.getText().contains("I love Selenium"));

// click alert ok

afterAccept.accept();

delay(2);

// for confirm

WebElement clickOnConfirm = driver.findElement(By

.xpath("//td/input[@name='confirmbutton']"));

clickOnConfirm.click();

delay(2);

Alert confirm = driver.switchTo().alert();

confirm.dismiss();

delay(2);

Alert afterDismiss = driver.switchTo().alert();

Assert.assertTrue(afterDismiss.getText().contains("You pressed Cancel"));

delay(2);

afterDismiss.accept();

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

WebElement selector = driver.findElement(By.id("Selector"));

Select select = new Select(selector);

select.selectByIndex(3);

select.selectByVisibleText("桃子");

select.selectByValue("apple");

System.out.println(select.getAllSelectedOptions().toString());

delay(2);

WebElement showSelectResult = driver.findElement(By

.name("showSelectResult"));

showSelectResult.click();

delay(2);

Alert yourSelect = driver.switchTo().alert();

Assert.assertTrue(yourSelect.getText().contains("苹果"));

delay(2);

yourSelect.accept();

// input box

WebElement editBox = driver.findElement(By

.xpath("//td/input[@id='edit']"));

editBox.sendKeys("Selenium is good");

WebElement submitButton = driver.findElement(By

.xpath("//input[@type='button' and @name='submit']"));

submitButton.click();

delay(2);

Alert submitAlert = driver.switchTo().alert();

Assert.assertEquals(submitAlert.getText(), "Selenium is good");

submitAlert.accept();

delay(2);

// for radio Box

WebElement duRadioBox = driver.findElement(By

.cssSelector("div#radio>input.Baidu"));

WebElement aLiRadioBox = driver.findElement(By

.cssSelector("div#radio>input.Alibaba"));

WebElement TXRadioBox = driver.findElement(By

.cssSelector("div#radio>input.Tencent"));

WebElement MiRadioBox = driver.findElement(By

.cssSelector("div#radio>input.Mi"));

delay(2);

Assert.assertTrue(TXRadioBox.isSelected());

Assert.assertTrue(!MiRadioBox.isEnabled());

delay(2);

duRadioBox.click();

Assert.assertTrue(duRadioBox.isSelected());

delay(2);

aLiRadioBox.click();

Assert.assertTrue(aLiRadioBox.isSelected());

delay(2);

// for checkBox

List webCheckBox = driver.findElements(By

.xpath("//input[@type='checkbox']"));

for (WebElement e : webCheckBox) {

e.click();

Assert.assertTrue(e.isSelected());

delay(2);

}

// for links

String defaultWindow = driver.getWindowHandle();

WebElement myLink = driver.findElement(By

.linkText("Copyright 2015 to be crazy"));

delay(3);

// scroll to mylink

JavascriptExecutor scroll = (JavascriptExecutor) driver;

scroll.executeScript("arguments[0].scrollIntoView();", myLink);

// open link in a new windows press shift when you click

delay(2);

Actions actions = new Actions(driver);

actions.keyDown(Keys.SHIFT).click(myLink).perform();

delay(3);

Set currentWindows = driver.getWindowHandles();

System.out.println(currentWindows.size());

for (String window : currentWindows) {

if (!window.endsWith(defaultWindow)) {

driver = driver.switchTo().window(window);

driver.manage().timeouts()

.pageLoadTimeout(60, TimeUnit.SECONDS);

driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

break;

}

}

Assert.assertTrue(driver.getCurrentUrl().contains("tobecrazy"));

delay(10);

driver.quit();

}

/**

* @author Young

* @param seconds

*/

public static void delay(int seconds) {

try {

Thread.sleep(seconds * 1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

selenium 页面经常改变元素_selenium 总结篇,常见方法和页面元素的操作相关推荐

  1. 微信小程序app.js中的全局变量globalData改变,如何通知其它页面界面显示改变,小程序中如何在其他页面中监听到globalData中值的变化

    微信小程序app.js中的全局变量globalData改变,如何通知其它页面界面显示改变,小程序中如何在其他页面中监听到globalData中值的变化 在小程序中,我们一般在app.js的onLaun ...

  2. js页面传值php页面,php实现跳转传值有什么方法,js页面跳转传值

    php实现跳转传值有什么方法PHP实现跳转值传递的方法是什么,php实现跳转值传递的方法如下:1.POST值传递:2.GET值传递:3.会话作为值传递.SESSION是一种全局变量,常用于用户登录后保 ...

  3. selenium 页面经常改变元素_selenium用jquery改变元素属性

    一.jQuery 语法 jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作. 1.基础语法: $(selector).action() 选择符(selector)即," ...

  4. selenium用jquery改变元素属性

    一.jQuery 语法 jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作. 1.基础语法: $(selector).action() 选择符(selector)即," ...

  5. Selenium之定位元素常用的8种方法整理(第一篇)

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  6. input里面只有name属性 可以用id定位么_Selenium元素定位 提高篇 CSS定位元素

    CSS(Casading Style Sheets)是一种用于渲染HTML或者XML文档的语言,CSS利用其选择器可以将样式属性绑定到文档中的指定元素.理论上来说无论一个元素定位多复杂都能够定位到元素 ...

  7. php 页面拖动改变大小,鼠标拖动改变DIV等网页元素的大小的实现方法

    1.初次实现 1.1 html代码 div change width by drag div change width by drag 1.2 js代码 var eleLeft = $('#myDiv ...

  8. 161026、更快速将你的页面展示给用户[前端优化篇]

    现在许多公司往往注重后端优化,而忽略了前端优化 想想如果辛苦优化了服务器,后台,排查了sql,却在最后页面加载展示的时候很慢,也得不偿失 其实,前后台优化都是相辅相成的,后台优化好了,响应请求速度快, ...

  9. getelementbyid获取不到js加载的元素_Selenium元素定位不到?JS注入轻松搞定!

    在使用Selenium做web自动化测试过程中,经常会遇到一些组件无法通过Selenium直接识别和处理,比如<input>标签组合的下拉框,比如日期控件.面对这些元素,我们可以引入JS注 ...

最新文章

  1. NIS 服务器的配置
  2. VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
  3. 【面试】Java基础中的那些事-One
  4. Java 15 转正了,国内几大互联网公司均有贡献,其中腾讯最为突出!
  5. 结合案例深入解析策略模式
  6. iptables:tproxy做透明代理
  7. [原创]传递UIScrollView的滑动事件到其子视图中
  8. 用python数据分析excel多地天气_Python实现天气查询功能(外加Excel技巧)
  9. IntelliJ IDEA 文件夹重命名--解决重命名后js文件引用找不到路径报404错误
  10. 操作系统在内存中的位置
  11. 【BZOJ】1085 [SCOI2005]骑士精神(IDA*)
  12. 教你如何使用 Python 将 pdf 文档进行 加密 解密——python实用小技能分享
  13. 泛知识+社交搜索,快手平台内容生态知识普惠价值凸显
  14. 在 dart fluter 中使用 typedef
  15. Unix系统下磁带机配置使用攻略
  16. 面料防静电测试方法指南
  17. jquery $(document).ready()与window.onload的区别
  18. 如何给妹子优化 Windows ?
  19. 1、输入圆柱体底面积的半径和圆柱体的高,输出其体积。
  20. 解决maven构建时警告:The artifact xxx has been relocated to xxx

热门文章

  1. Python之递归函数
  2. Qt UDP 广播简单示例
  3. 模式识别与机器学习课程笔记——决策树和贝叶斯估计
  4. 多车调度问题(大疆Robot Master)——ROS键盘控制失灵,小车无法收敛定位,路径规划出错
  5. just函数 python_在python里写Monad
  6. 虚拟交换机软件_H3C交换机IRF配置介绍
  7. 华大 MCU 之六 SEGGER Embedded Studio 及 Ozone 使用 Jlink 调试
  8. vmlite linux版本,vmlite 安装 xp mode及xp、win7、linux的虚拟磁盘到d盘的方法
  9. java简易计算器考察什么_练习:用java写一个简易计算器
  10. 下列关于linux的进程,描述不正确的是,进程是资源管理的最小单位,2012年7月成人自考网络操作系统考试真题...