cssSelector

据说cssSelector比xpath快。

所以,有固定ID属性的页面元素用By.id或者By.cssSelector(“#id属性值”)来找,有class属性优先用By.cssSelector(“.class属性值”)的就尽量用cssSelector(#代表id=。.代表class=)。

例如以下博客有具体介绍cssSelector:

http://blog.csdn.net/hwm831002/article/details/8424239

http://blog.csdn.net/tenfyguo/article/details/5780970

窗体切换

当我们点击linktext时或者点击某些button,提交某些表单时(不能一概而论。须要看具体页面的),浏览器会新开一个窗体打开,但此时WebDriver实例事实上还指向前一个页面。普通情况,我们都是想让WebDriver指向新开页面的,此时须要切换窗体。

        //用WindowHandle的方式获取新开页面
String currentWindow = dr.getWindowHandle();
Set<String> handles = dr.getWindowHandles();
Iterator h = handles.iterator();
while(h.hasNext()){
dr = dr.switchTo().window((String) h.next());
}

或者依据页面title来进行切换

         //用WindowHandle+页面title来切换dr至我们想要的窗体
currentWindow = dr.getWindowHandle();
handles = dr.getWindowHandles();
//System.out.println(handles.size());
h = handles.iterator();
while(h.hasNext()){
dr = dr.switchTo().window((String) h.next());
//System.out.println(dr.getTitle());
if (dr.getTitle().equals("查找好友 - 挖財社区"))
break;
}

须要注意的是:假设用WebDriver.get(URL)方式或者WebDriver.navigate().to(URL)的方式打开URL时。浏览器并不会新开窗体,此时就不用切换WebDriver窗体。

非典型下拉菜单的选择



上图是某財BBS右上角搜索框的一个下拉菜单。它明显不是一个典型的下拉选择框,用经常使用的Seector是无法实现它的选择的。

自己实验了好久,最终发现,这样的须要先点击展开下拉菜单。然后将鼠标移动到用户上,此时用户会变红,再点击。才干够选择上。

为了模拟的更像,选择完了之后。再将鼠标移动到旁边别的地方。点击一下,收起下拉菜单。

^_^

它的html源代码例如以下

<a hidefocus="true" onclick="showMenu(this.id)" class="showmenu xg1" id="comiis_twtsc_type" href="javascript:;" initialized="true">帖子/a>
<ul style="position: absolute; z-index: 301; left: 1090px; top: 86.5px; display: none;" class="p_pop" id="comiis_twtsc_type_menu" initialized="true">
<li>
<a class="curtype" rel="forum" href="javascript:;">帖子</a></li>
<li>
<a rel="group" href="javascript:;">財友会</a>
</li>
<li>
<a rel="collection" href="javascript:;">专辑</a>
</li>
<li>
<a rel="article" href="javascript:;">资讯</a>
</li>
<li>
<a rel="user" href="javascript:;">用户</a>
</li>
</ul>

java代码例如以下,act.moveByOffset(20,30)表示往右下移动

        //点开搜索类型下拉框,将鼠标移动到用户上并选择
Actions act = new Actions(dr);
WebElement dropDown = dr.findElement(By.cssSelector("a.showmenu.xg1"));
WebElement user = dr.findElement(By.cssSelector("ul#comiis_twtsc_type_menu>li>a[rel='user']"));
act.click(dropDown).perform();
act.moveToElement(user).click().perform();
act.moveByOffset(20,30).click().perform();

代码块

总体代码例如以下。实现:

- 某財BBS自己主动登录

- 打开理財子版块

- 点击图标关闭左側导航栏

- 选择搜索用户

- 输入关键字并搜索

- 切换窗体

- 输出全部搜索到的包括关键字的username

package pkg;

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; import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit; /**
* Created by Sophie on 15/7/4.
*/
public class AutoLoginSearchTest {
public WebDriver dr;
public String url; public void setUp(WebDriver dr, String url){
this.dr = dr;
this.url = url;
this.dr.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
} public WebDriver login(AutoLoginSearchTest a) throws Exception {
//登录
a.dr.get(a.url);
a.dr.findElement(By.id("account")).clear();
a.dr.findElement(By.id("account")).sendKeys("******");
a.dr.findElement(By.id("pwd")).clear();
a.dr.findElement(By.id("pwd")).sendKeys("******");
a.dr.findElement(By.id("login-btn")).click();
return a.dr;
} public WebDriver switchWindow(WebDriver dr)throws Exception{
//打开理財规划子版块
dr.findElement(By.linkText("理財规划")).click();
//用WindowHandle的方式获取新开页面
String currentWindow = dr.getWindowHandle();
Set<String> handles = dr.getWindowHandles();
Iterator h = handles.iterator();
while (h.hasNext()) {
dr = dr.switchTo().window((String) h.next());
}
System.out.println(dr.getCurrentUrl());
dr.manage().window().maximize();
//然后关闭左側导航栏
dr.findElement(By.cssSelector("a.comiis_left_closes")).click();
return dr;
} public WebDriver mouseMove(WebDriver dr)throws Exception{ //点开搜索类型下拉框,将鼠标移动到用户上并选择
Actions act = new Actions(dr);
WebElement dropDown = dr.findElement(By.cssSelector("a.showmenu.xg1"));
WebElement user = dr.findElement(By.cssSelector("ul#comiis_twtsc_type_menu>li>a[rel='user']"));
act.click(dropDown).perform();
act.moveToElement(user).click().perform();
act.moveByOffset(20, 30).click().perform();
return dr;
} public WebDriver search(WebDriver dr)throws Exception{
//找到搜索输入框,并输入关键字,然后点击搜索button
WebElement input = dr.findElement(By.id("comiis_twtsc_txt"));
input.clear();
input.sendKeys("周杰伦");
dr.findElement(By.id("comiis_twtsc_btn")).click();//Click之后FireFox新开了一个页面 //用WindowHandle+页面title来切换dr至我们想要的窗体
String currentWindow = dr.getWindowHandle();
Set<String> handles = dr.getWindowHandles();
//System.out.println(handles.size());
Iterator h = handles.iterator();
while (h.hasNext()) {
dr = dr.switchTo().window((String) h.next());
//System.out.println(dr.getTitle());
if (dr.getTitle().equals("查找好友 - 挖財社区"))
break;
}
//xpath模糊查找
List<WebElement> searchResult = dr.findElements(By.xpath("//a[contains(@title,'周杰伦')]"));
System.out.println("搜索到" + searchResult.size() + "个周杰伦粉丝,他们各自是:");
for (int i = 0; i < searchResult.size(); i++) {
System.out.println(searchResult.get(i).getAttribute("title"));
}
return dr;
} public void tearDown(WebDriver dr) throws Exception {
dr.quit();
} public static void main(String[] args) throws Exception {
WebDriver ff = new FirefoxDriver();
String url ="https://www.wacai.com/user/user.action?url=http%3A%2F%2Fbbs.wacai.com%2Fportal.php";
AutoLoginSearchTest autoLoginSearch = new AutoLoginSearchTest();
autoLoginSearch.setUp(ff,url);
WebDriver afterLogin = autoLoginSearch.login(autoLoginSearch);
WebDriver childForum = autoLoginSearch.switchWindow(afterLogin);
WebDriver mouseAction = autoLoginSearch.mouseMove(childForum);
WebDriver searchResult = autoLoginSearch.search(mouseAction);
autoLoginSearch.tearDown(searchResult); }
}

哈哈。第一次用CSDN的MarkDown。爽歪!!!再也不用原来那个难受的控件来写博文了~~还有,第一次用IDEA,爽歪!。!Eclipse简直叫人太汗了。。。

Selenium_WebDriver登录模拟鼠标移动切换窗体等操作练习(cssSelector初练手)_Java的更多相关文章

  1. C# 如何用计时器Timer控件实现停留几秒再做切换窗体的操作

    C# Timer用法及实例详解 关于C# Timer类  在C#里关于定时器类就有3个 C# Timer使用的方法1.定义在System.Windows.Forms里 C# Timer使用的方法2.定 ...

  2. selenuim2模拟鼠标键盘操作

    有时候有些元素不便点击或者做其他的操作,这个时候可以借助selenium提供的Actions类,它可以模拟鼠标和键盘的一些操作,比如点击鼠标右键,左键,移动鼠标等操作.对于这些操作,使用perform ...

  3. selenium webdriver从安装到使用(python语言),显示等待和隐性等待用法,切换窗口或者frame,弹框处理,下拉菜单处理,模拟鼠标键盘操作等

    selenium的用法 selenium2.0主要包含selenium IDE 和selenium webDriver,IDE有点类似QTP和LoadRunner的录制功能,就是firefox浏览器的 ...

  4. winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已解] 望一起讨论)(技术改变世界-cnblog)

    http://www.cnblogs.com/IAmBetter/archive/2012/01/14/2322156.html winform设计一个登录界面和修改密码的界面-自动切换窗体(问题[已 ...

  5. selenium webdriver(4)---模拟鼠标键盘操作

    webdriver提供Actions来模拟鼠标悬浮.拖拽和键盘输入等操作,详细代码见org.openqa.selenium.interactions.Actions.本文通过几个实例来说明Action ...

  6. windows7如何用键盘模拟鼠标操作

    windows7如何用键盘模拟鼠标操作 https://jingyan.baidu.com/article/6dad5075104907a123e36e38.html 听语音 37453人看了这个视频 ...

  7. WEBBROWSER中模拟鼠标点击(SendMessage/PostMessage)

    好久没有写文章,发一篇顶顶博客访问量.别人建议转一些比较好的代码也贴过来,但是我打算这里主要发自己原创的代码,所以么..流量该多少就多少吧... 回到主题,在webbrowser中点击某链接网上几乎都 ...

  8. Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  9. py库: pyautogui (自动测试模块,模拟鼠标、键盘动作)

    PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块 pyautogui 库 2017-10-4 pip install pyautogui python pip.exe install p ...

随机推荐

  1. Android 开发笔记___复选框__checkbox

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...

  2. ⑩bootstrap组件 导航 使用基础案例

        <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  3. .md即markdown文件的基本常用编写语法

    因为现在的前端基本上都用上了前端构建工具,那就难免要写一些readme等等的说明性文件,但是这样的文件一般都是.md的文件,编写的语法自然跟其他格式的文件有所区别,本文也是我学习写markdown文件 ...

  4. Vue.js—组件快速入门以及实例应用

    上次我们学习了Vue.js的基础,并且通过综合的小实例进一步的熟悉了Vue.js的基础应用.今天我们就继续讲讲Vue.js的组件,更加深入的了解Vue,js的使用.首先我们先了解一下什么是Vue.js ...

  5. maven项目导出依赖的Jar包以及项目本身以jar包形式导出详细教程

    一.maven项目已jar包形式导出 1.首先右键项目,选择Export 2.选择好项目,设置导出路径和jar名字即可: 二.导出maven项目所依赖的所有jar包 1.右键项目,选择Export 2 ...

  6. Gmail,QMail,163邮箱的 IMAP/SMTP/POP3 地址

    我们在客户端设置邮箱或者使用 PHPMailer 发送邮件的时候,我们都会去查找这些邮箱的 IMAP/SMTP/POP3 地址,这里就列出 Gmail, QMail, 163邮箱这三个常用邮箱的这些地 ...

  7. Kaggle实战之二分类问题

    0. 前言 1. MNIST 数据集 2. 二分类器 3. 效果评测 4. 多分类器与误差分析 5. Kaggle 实战 0. 前言 "尽管新技术新算法层出不穷,但是掌握好基础算法就能解决手 ...

  8. 魔方NewLife.Cube升级v2.0

    魔方是一套集成权限管理的MVC管理后台,最具特色功能是模版覆盖机制,是XCode实体类的最佳搭档! v2.0.2017.1126   借助Ajax支持高级操作,如:删除选中.批量启用禁用等 用户管理增 ...

  9. 《Linux命令行与shell脚本编程大全》第十五章 呈现数据

    15.1 理解输入和输出 现在知道两种显示脚本输出的方法 1)在显示器屏幕上显示 2)将输出文件重定向到文件中 15.1.1 标准文件描述符 Linux系统将每个对象当做文件处理.这包括输入和数出进程 ...

  10. azure上连续部署web

    连续部署web   连续部署web,可以在第一次部署完web应用后,方便修改和自动提交代码部署新版本的web应用.其中自动提交使用github中的webhook,使代码在master上提交修改后可以自 ...