当前位置: 首页 > 编程日记 > 正文

2_Selenium对象识别

1 准备工作

  • firebug和firepath

    我们使用xpath进行元素定位,所以需要安装firefox的两个插件,帮助编写xpath

  • html知识

    在编写xpath的时候,需要查看html代码,所以需要理解html知识,可以到http://www.w3school.com.cn/去自学

  • xpath知识

    也可以到http://www.w3school.com.cn/学习

2 一般对象识别及操作代码

package com.selenium.test;import java.util.List;
import java.util.Set;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;public class Test2 {public static void main(String[] args) throws InterruptedException {WebDriver driver = new FirefoxDriver();    //启动火狐浏览器driver.manage().window().maximize();    //最大化浏览器driver.navigate().to("http://www.baidu.com/");    //导航到百度//登录 - 链接WebElement linkLogin = driver.findElement(By.xpath("//div[@id='u1']/a[text()='登录']"));linkLogin.click();//等待2秒Thread.sleep(3000);//用户名、密码 - 输入框WebElement textUsername = driver.findElement(By.xpath("//input[@id='TANGRAM__PSP_8__userName']"));textUsername.clear();textUsername.sendKeys("栗子测试");WebElement textPassword = driver.findElement(By.xpath("//input[@id='TANGRAM__PSP_8__password']"));textPassword.clear();textPassword.sendKeys("2472471982");//登录 - 按钮WebElement buttonLogin = driver.findElement(By.xpath("//input[@id='TANGRAM__PSP_8__submit']"));buttonLogin.click();//等待2秒Thread.sleep(3000);//悬停Actions action = new Actions(driver); WebElement linkMe = driver.findElement(By.xpath("//a[@id='s_username_top']/span"));action.moveToElement(linkMe).perform();//账号设置 - 链接WebElement linkSeniorSearch = driver.findElement(By.xpath("//div[@id='s_user_name_menu']/div/a[3]"));linkSeniorSearch.click();//账号设置 - 窗口跳转String firstWindowHandle = driver.getWindowHandle();    //获取第一个窗口句柄Set<String> towHandles = driver.getWindowHandles();for (String handle : towHandles) {    //遍历所有窗口句柄System.out.println("+++" + handle); driver.switchTo().window(handle);    //切换两次,切换到第二个窗口
        }//修改资料 - 链接WebElement linkModifyData = driver.findElement(By.xpath("//div[@id='content']//a[text()='修改资料']"));linkModifyData.click();//修改资料 - 窗口跳转Set<String> threeHandles = driver.getWindowHandles();    //获取三个窗口句柄threeHandles.removeAll(towHandles);        //移除原来的两个句柄String thirdWindowHandle = threeHandles.iterator().next();    //剩下一个句柄driver.switchTo().window(thirdWindowHandle);    //切换到第三个窗口//性别 - 单选(被看做一组)List<WebElement> radiosGender = driver.findElements(By.xpath("//input[@name='passport_sex']"));    //定位所有单选按钮radiosGender.get(1).click();    //index从0开始//血型 - 此下拉框非Select,只是样式像WebElement divBlood= driver.findElement(By.xpath("//div[@id='cussel1000002']/div"));    divBlood.click();WebElement linkBlood= driver.findElement(By.xpath("//div[@id='cussel1000002']//a[text()='AB']"));    linkBlood.click();//保存 - 按钮WebElement buttonSaveBasic = driver.findElement(By.xpath("//form[@id='profile']/child::input"));buttonSaveBasic.click();//详细资料 - 链接WebElement linkDetailedInfo = driver.findElement(By.xpath("//div[@id='content']//a[text()='详细资料']"));linkDetailedInfo.click();//等待1秒Thread.sleep(1000);//性格 - 多选框(被看做一组)List<WebElement> checkboxCharacter = driver.findElements(By.xpath("//form[@id='profile']/table//tr[@class='passport_character']//input"));WebElement  element = checkboxCharacter.get(6);element.click();//保存 - 按钮WebElement buttonSaveDetailedInfo = driver.findElement(By.xpath("//form[@id='profile']/child::input"));buttonSaveDetailedInfo.click();//关闭当前窗口,回到第一个窗口
        driver.close();driver.switchTo().window(firstWindowHandle);}}

 3 其他对象操作及代码

  • 下拉框
WebElement selectElement = driver.findElement(By.xpath("//td[@id='adv-setting-4']/select"));    //先定位下拉框
Select select = new Select(selectElement);
select.selectByVisibleText("最近一天");
  • 上传文件
WebElement file = driver.findElement(By.xpath("//div[@id='uploadfile']/input"));
file.sendKeys("C:\\test.txt");
  • JS
JavascriptExecutor js2 = (JavascriptExecutor)driver;
js2.executeScript("alert('栗子测试,QQ:2472471982')");
Alert alert = driver.switchTo().alert();    //切换到弹出窗
alert.accept();
  • JS属性设置
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("document.getElementById('saveButton').firstElementChild.disabled = false");
  • iframe
WebElement iframe = driver.findElement(By.xpath("//iframe[@name='contect']"));
driver.switchTo().frame(iframe);
WebElement text = driver.findElement(By.xpath("//input[@id='username']"));
text.clear();
text.sendKeys("栗子测试,QQ:2472471982");
  • 弹出框
WebElement link = driver.findElement(By.xpath("//div[@id='alert']/input"));
link.click();
Alert alert = driver.switchTo().alert();    //切换到弹出窗
alert.accept();
  • 后退
driver.navigate().back();

栗子测试

  • 所有文章均为原创,是栗子测试所有人员智慧的结晶,如有转载请标明出处
  • 如果您在阅读之后觉得有所收获,请点击右下角推荐
  • QQ:2472471982,欢迎大家前来咨询和探讨(暗号:栗子测试)

转载于:https://www.cnblogs.com/lizitest/p/5135538.html

相关文章:

Mac OS Terminal Commands

转自 &#xff1a; http://www.renfei.org/blog/mac-os-x-terminal-101.html Mac OS X Terminal 101&#xff1a;终端使用初级教程 July 29, 2012 / 编程指南最近学习苹果认证的《Mac OS X Support Essentials》教程&#xff0c;看到 Command Line 一节有很多实用的知识&#x…

封装一个计时器,记录页面的停留时间

在页面加载时初始化计时器&#xff0c;页面结束时取值。 效果如图&#xff1a; 下面是uniapp的代码示例&#xff1a; <template><view class"aaaacc"><view class"aaa">{{time}}</view></view> </template><scri…

ess用户名和密码_陈ess洁如何从摄影系学生转变为成功的自由职业者和内容创作者(播客)...

ess用户名和密码This week, for our last podcast episode of 2019, I got to chat with freelancer and content creator Jessica Chan - known as CoderCoder on social media - about how she got into tech and started her educational website and YouTube channel.本周&…

安装wxpython——python程序GUI图形界面使用

一、本机使用python版本 1、本机使用python版本为3.6.2&#xff0c;windows系统。 二、安装步骤 1、开始-运行-cmd 2、python3.x 需要进入python安装位置下是pip目录&#xff0c;再执行pip 命令 其中&#xff1a;python F:\Users\Administrator\AppData\Local\Programs\Python\…

ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)

ASP.NET 2.0及以上的开发平台&#xff0c;为全球化本地化应用程序提供了工具&#xff0c;而且实现起来非常简单。以下内容是使用c#&#xff0c;按照帮助一步步做的&#xff0c;将为初学者提供详细的实现步骤。 一 几个必要概念 &#xff08;一&#xff09; 支持全球化  由于…

promise 和 async await区别

什么是Async/Await? async/await是写异步代码的新方式&#xff0c;以前的方法有回调函数和Promise。   async/await是基于Promise实现的&#xff0c;它不能用于普通的回调函数。   async/await与Promise一样&#xff0c;是非阻塞的。   async/await使得异步代码看起来像…

mac 制作usb启动盘_如何使用Mac制作Windows 10 USB-从Mac终端构建可启动的ISO

mac 制作usb启动盘Most new PCs dont come with DVD drives anymore. So it can be a pain to install Windows on a new computer.大多数新PC不再附带DVD驱动器。 因此&#xff0c;在新计算机上安装Windows可能会很痛苦。 Luckily, Microsoft makes a tool that you can use …

作业05-继承、多态、抽象类与接口

1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口&#xff0c;Comparable&#xff0c;Comparator 1.2 尝试使用思维导图将这些关键词组织起来。 1.3 可选&#xff1a;使用常规方法总结其他上课内容。 1.接口特点&#xff1a;一个公开的界面 有统一定义的规…

炫彩流光按钮 html+css

话不多&#xff0c;先上效果&#xff1a; 简介&#xff1a; 用基础css做一个有一点炫酷的流光按钮&#xff0c;不止按钮&#xff0c;只要是盒子就行。 具体步骤&#xff1a; 1.先定义一个盒子当做按钮&#xff0c;如我就用a标签&#xff1a; <body><a href"#…

SQL取上一条, 下一条记录方法

如果我们需要取id为3的前后的1条记录. 就可以用以下方法 取上一条记录: select * from 表名 where id<3 order by id desc limit 1取下一条记录: select * from 表名 where id>3 order by id asc limit 1大小于比较 order limit 转载于:https://www.cnblogs.com/…

react中使用构建缓存_通过构建海滩度假胜地网站,了解如何使用React,Contentful和Netlify...

react中使用构建缓存In this full course from John Smilga you will learn React by building a beach resort website project. The project uses React router for routing, React context API for state management, Contentful headless CMS for data management, and Net…

R语言实战 - 基本统计分析(2)- 频数表和列联表

数据&#xff1a; > library(vcd) > head(Arthritis)ID Treatment Sex Age Improved 1 57 Treated Male 27 Some 2 46 Treated Male 29 None 3 77 Treated Male 30 None 4 17 Treated Male 32 Marked 5 36 Treated Male 46 Marked 6 23 …

随机位置显示图片不重叠前端实现详细讲解附效果图,代码可直接使用

目录先看看效果图所要实现的功能看看代码js代码讲解&#xff1a;下面看看完整代码吧小程序版本完整代码VUE版本的代码&#xff1a;先看看效果图 所要实现的功能 在页面上随机的位置显示随机大小的图片&#xff0c;并且每个图片不能重叠&#xff0c;完整实现代码。 看看代码 …

MVC缓存OutPutCache学习笔记 (一) 参数配置

OutPutCache 参数详解 Duration : 缓存时间&#xff0c;以秒为单位&#xff0c;这个除非你的LocationNone&#xff0c;可以不添加此属性&#xff0c;其余时候都是必须的。 Location : 缓存放置的位置; 该值为枚举值: None: 当被设置为None时&#xff0c;其余的任何设置将不起作…

在Mac上控制Alt Delete-如何在Macbook上打开任务管理器

It happens to the best of us: were working away on some important project, and our trusty computer freezes. Or rather, a program were in just stops responding. So what do you do?这对我们最好的人来说是偶然的&#xff1a;我们正在做一些重要的项目&#xff0c;而…

HEW MAP文件使用

参考资料转载于:https://www.cnblogs.com/iluzhiyong/p/5145396.html

算法导论九章 答案

http://blog.csdn.net/z84616995z/article/details/18840823?reload 9.3-8题&#xff1a; http://blog.csdn.net/z84616995z/article/details/18938181 9.3-9题&#xff1a; http://blog.csdn.net/z84616995z/article/details/18889535转载于:https://www.cnblogs.com/sa51718…

小程序实现瀑布流,获取图片高度分成两组数据的函数封装代码

把一个数组根据数组内部的图片的高度&#xff0c;拆分成两个数组&#xff0c;组成瀑布流数据的方法。 使用方式&#xff1a; async created() {var arr this.$mock.sssdata.data.lists;//arr 是一个数组&#xff0c;里面包含若干对象&#xff0c;对象里面有图片var myArr a…

实现线程哪种方法更好_实施数据以实现更好的用户体验设计的4种方法

实现线程哪种方法更好Gone are the days when design used to rely mainly on the color palettes and the creativity of the designer. In the rapidly expanding technological world of today, it is essential to work across departments to enhance the screen experien…

String比较.equals

首先定义四个变量str public class SIzhui {public static void main(String[] args) {String str1"wang";String str2"li";String str3"wang";String str4new String("wang");} } 然后进行比较 public class SIzhui {public static …

mac下mysql5.7.10密码问题

mysql5.7.10刚安装好&#xff0c;会生成一个随机密码。 如果没记住这个随机密码&#xff0c;那么到mysql/bin/下执行mysql_secure_installation命令 按照提示重置密码和其他选项。 ps&#xff1a;找了一下午终于找到方法了&#xff01;&#xff01;&#xff01; 转载于:https:/…

Error: Cannot find module ‘express‘

解决方案&#xff1a;把node_module整个文件夹删掉,然后npm clean cache,看下package.json里有没有express的依赖项,有的话直接npm install,没有的话 npm install express --save

Observables简介以及它们与Promise有何不同

‘Observables’, ‘Observables’, ‘Observables’...Yes! Today, we will talk about this often discussed word of the market. Well also learn how they are different from Promises (havent heard about Promises? Not to worry! You will know more soon). Let’s s…

Spring Boot项目错误:Error parsing lifecycle processing instructions

pom.xml文件错误&#xff1a;Error parsing lifecycle processing instructions 解决方法&#xff1a;清空.m2/repository下的所有依赖文件&#xff0c;重新下载即可解决该问题。转载于:https://www.cnblogs.com/EasonJim/p/7724683.html

oracle执行计划连接方式

嵌套循环&#xff08;Nested Loops &#xff08;NL&#xff09;&#xff09;假如有A、B两张表进行嵌套循环连接&#xff0c;那么Oracle会首先从A表中提取一条记录&#xff0c;然后去B表中查找相应的匹配记录&#xff0c;如果有的话&#xff0c;就把该条记录的信息推到等待返回的…

大转盘完整源码附效果图,可以下载直接用

本转盘实现功能&#xff0c;可以动态配置奖品和转盘相关的任何图片&#xff0c;可以灵活配置使用。是基于 uni-app 实现的。可以在小程序或者H5&#xff0c;各端兼容使用。 效果图&#xff1a;因为GIF图的掉帧&#xff0c;所以显示抽奖的转动速度慢&#xff0c;实际上转动比较…

使用FortJs使用现代JavaScript开发Node.js

介绍 (Introduction) Nodejs gives you the power to write server side code using JavaScript. In fact, it is very easy and fast to create a web server using Nodejs. There are several frameworks available on Node package manager which makes the development eve…

find 按时间查找

find 按时间查找 转载▼分类&#xff1a; linuxShell日记-mtime 修改时间-ctime 改变时间-atime 访问时间-mtime 5 至少5天之前修改过的文件&#xff0c;至少5天没修改过-mtime -5 5天之内修改过的文件-mtime 5 刚好5天前修改的文件 -perm 按权限查找 -perm 001 精确匹配权限…

转:从零开始做app需要做的事情列表

https://qdan.me/list/VaXl7N8emfv1ayWg 从零开始做App的Bootstrap 做一个App&#xff0c;需要很多东西。 不定期更新。 团队 工欲善其事&#xff0c;必先利其器。 需求管理 支持版本、迭代、需求的创建与管理。 产品经理在上面录入需求&#xff0c;开发参照开发&#xff0c;测…

uniapp自定义导航栏样式,自定义导航栏组件使用说明,兼容小程序和H5及各端

实现思路&#xff1a; 把底部导航做成一个组件&#xff0c;点击导航显示的页面也做成组件&#xff0c;在启动页面引入这四个组件&#xff0c;点击封装的导航组件就显示相应的组件页面&#xff0c;这样就不会出现页面重新加载的问题了&#xff0c;有个弊端就是导航页面不能使用…