元素识别方法、一组元素定位、鼠标操作、多窗口处理、下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

元素识别方法:

 driver.find_element_by_id()
 driver.find_element_by_name()
 driver.find_element_by_class_name()
 driver.find_element_by_tag_name()
 driver.find_element_by_link_text()
 driver.find_element_by_partial_link_text()
 driver.find_element_by_xpath()
 driver.find_element_by_css_selector()
web UI自动化测试元素识别的原则是什么?
如果有唯一的id,就用id定位元素;
如果没有,最好使用xpath定位;
如果xpath定位失败,哪个可行使用哪个。

一组元素定位:

 driver.find_element_by_link_text("复选框").click()
 inputs = driver.find_elements_by_tag_name("input")
 for input in inputs:
     if  input.get_attribute("type") =="checkbox":      #避免定位的不唯一性
         input.click()

鼠标操作:

 from selenium.webdriver.common.action_chains import ActionChains 导入控制鼠标事件的方法
 1、#鼠标悬停
 mm = driver.find_element_by_link_text("设置")
 ActionChains(driver).move_to_element(mm).perform()
 #页面显示并可点击的都可以尝试用超级链接
 driver.find_element_by_link_text("搜索设置").click()
 2、#鼠标右击
 right =driver.find_element_by_xpath("xx")
 ActionChains(driver).context_click(right).perform()
 3、#鼠标双击
 double =driver.find_element_by_xpath("xxx")
 ActionChains(driver).double_click(double).perform()
 4、#鼠标拖放
 #定位元素的原位置
 element = driver.find_element_by_name("xxx")
 #定位元素要移动到的目标位置
 target = driver.find_element_by_name("xxx")
 #执行元素的移动操作
 ActionChains(driver).drag_and_drop(element, target).perform()
 5、#鼠标左键
 left=driver.find_element_by_xpath("xxx")
 ActionChains(driver).click_and_hold(left).perform()

多窗口处理:

 curr_handle = driver.current_window_handle     #获得当前句柄
 print("curr_handle=",curr_handle)              #打印当前句柄
 time.sleep(3)
 driver.find_element_by_link_text("python自动化测试").click()
 all_handle = driver.window_handles             #获取所有的句柄
 for i in all_handle:
     if i != curr_handle:                       #如果不等于之前定义的句柄
         driver.switch_to_window(i)             #切换到另一个句柄
         time.sleep(2)
         curr_handle1 = driver.current_window_handle
         print("curr_handle1=",curr_handle1)
         print(driver.title)                    #打印title
         driver.quit()

下拉框:

 #两种方式实现下拉框的选择操作
 from selenium import webdriver
 from selenium.webdriver.support.select import Select

 driver = webdriver.Firefox()
 driver.get("file:///C:/Users/jia_myself/Desktop/1.html")
 ele = driver.find_element_by_xpath(".//*[@id='status']")
 # Select(ele).select_by_index(2) #下标形式选择
 Select(ele).select_by_value(")  #源码value值相对应方式

 '''html
 <select id="status" class="form-control valid" onchange="" name="status">
     <option value=""></option>
     <option value="0">未审核</option>
     <option value="1">初审通过</option>
     <option value="2">复审通过</option>
     <option value="3">审核不通过</option>
 </select>
 '''
    另一种下拉框的编写形式:
 driver.find_element_by_xpath("//*[@id='status']/option[3]").click() #初审通过
 driver.find_element_by_xpath("//option[@value='1']").click()        #初审通过

文本域及富文本框:

一般用js进行执行,如下示例

文本域输入:document.getElementById('_ComContent1').innerHTML="xxxxx"
富文本框输入:document.getElementById('_ComContent1').contentWindow.document.body.innerHTML="xxxxx"

 文本域的输入:
 js = "document.getElementById('_ComContent1').innerHTML='在超市卖吗'"
 element = dr.find_element_by_xpath(".//*[@id='_ComContent1']")
 dr.execute_script(js,element)

 富文本框的输入:
 js = "document.getElementById('_ComContent1').contentWindow.document.body.innerHTML='在超市卖吗'"
 element = dr.find_element_by_xpath(".//*[@id='_ComContent1']")
 dr.execute_script(js,element)

弹窗:

alert弹窗

1 driver.find_element_by_id("alert").click()  #定位并点击
2 time.sleep(5)
3 alert  = driver.switch_to_alert()           #切换到弹窗上
4 print(alert.text)                           #打印弹窗信息
5 alert.accept()                              #确定
6 #alert.dismiss()                            #取消

confirm弹窗

 driver.find_element_by_id("confirm").click() #定位并点击
 comfirm = driver.switch_to_alert()           #切换到弹窗上
 print(comfirm.text)                          #打印弹窗信息
 comfirm.accept()                             #确认
 # comfirm.dismiss()                          #取消

 # driver.switch_to_alert().accept()    #直接点击确定

prompt弹窗

1 driver.find_element_by_id("prompt").click()  #定位并点击弹出弹窗
2 prompt = driver.switch_to_alert()            #切换并定位到弹窗
3 print(prompt.text)                           #打印弹窗上的信息
4 prompt.send_keys("我爱你你可知道")             #输入内容
5 prompt.accept()                              #确认
6 # prompt.dismiss()                           #取消

JS:

 #先定义两个滑动页面的方法并定义js语句,执行直接调用即可
 def scroll_top():
     if driver.name == "chrome":
         js = "var q=document.body.scrollTop=0"
     else:
         js = "var q=document.documentElement.scrollTop=0"
     return driver.execute_script(js)

 def scroll_foot():
     if driver.name == "chrome":
         js = "var q=document.body.scrollTop=10000"
     else:
         js = "var q=document.documentElement.scrollTop=10000"
     return driver.execute_script(js)

 scroll_foot()   #调用滑到页底
 #更改属性,隐藏形式改为文本形式
 driver.execute_script("document.getElementById('em').type='text';")
 #执行一个弹窗
 driver.execute_script("alert('显示出来啦!')")

frame:

 driver.find_element_by_link_text("frame2").click()
 driver.switch_to_frame("frame1")         #通过id定位
 # driver.switch_to_frame("myframe")   #通过name定位
 driver.find_element_by_link_text("我为自己代言").click() #我为自己代言为frame1的超文本链接

文件上传:

 #定位上传按钮,添加本地文件
 driver.find_element_by_name("file").send_keys('D:/selenium_use_case/upload_file.txt')

文件下载:

 import os
 from selenium import webdriver

 fp = webdriver.FirefoxProfile()
 fp.set_preference("browser.download.folderList",2)
 fp.set_preference("browser.download.manager.showWhenStarting",False)
 fp.set_preference("browser.download.dir", os.getcwd())
 fp.set_preference("browser.helperApps.neverAsk.saveToDisk",
 "application/octet-stream")

 browser = webdriver.Firefox(firefox_profile=fp)
 browser.get("http://pypi.python.org/pypi/selenium")
 browser.find_element_by_partial_link_text("selenium-2").click()

 注释:
 browser.download.dir 用于指定所下载文件的目录。
 os.getcwd() 该函数不需要传递参数,用于返回当前的目录。
 application/octet-stream 为内容的类型。

Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载的更多相关文章

  1. Nginx集群之WCF大文件上传及下载(支持6G传输)

    目录 1       大概思路... 1 2       Nginx集群之WCF大文件上传及下载... 1 3       BasicHttpBinding相关配置解析... 2 4       编写 ...

  2. springmvc环境下使用ajaxfileupload.js进行文件上传

    controller: /* #region */ @RequestMapping(produces = "text/html;charset=UTF-8", value = &q ...

  3. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  4. Hadoop之HDFS原理及文件上传下载源码分析(下)

    上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...

  5. Selenium2(java)selenium常用API 五

    上传文件   元素标签是input时上传方式 上传是一个input,对于这种元素是input 的标签可以采用元素的sendKeys()方法来直接赋值,upload.html代码: <html&g ...

  6. ASP.NET MVC下使用文件上传

    这里我通过使用uploadify组件来实现异步无刷新多文件上传功能. 1.首先下载组件包uploadify,我这里使用的版本是3.1 2.下载后解压,将组件包拷贝到MVC项目中 3.  根目录下添加新 ...

  7. 使用 JavaScript File API 实现文件上传

    概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...

  8. Plupload文件上传组件使用API

    Plupload有以下功能和特点: 1.拥有多种上传方式:HTML5.flash.silverlight以及传统的<input type=”file” />.Plupload会自动侦测当前 ...

  9. 【ASP.NET Web API教程】5.3 发送HTML表单数据:文件上传与多部分MIME

    原文:[ASP.NET Web API教程]5.3 发送HTML表单数据:文件上传与多部分MIME 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本系列教程,请先看前面 ...

随机推荐

  1. Ubuntu安装Gnome3

    参考:How To Install GNOME In Ubuntu 14.04 . Ubuntu11.10安装GNOME3,卸载UNITY和UNITY2D操作 和How to install Gnom ...

  2. iOS RunLoop简介

    一.什么是RunLoop? RunLoop是运行循环,每个Cocoa应用程序都由一个处于阻塞状态的do/while循环驱动,当有事件发生时,就把事件分派给合适的监听器,如此反复直到循环停止.处理分派的 ...

  3. 3D Grid Effect – 使用 CSS3 制作网格动画效果

    今天我们想与大家分享一个小的动画概念.这个梦幻般的效果是在马库斯·埃克特的原型应用程序里发现的​​.实现的基本思路是对网格项目进行 3D 旋转,扩展成全屏,并呈现内容.我们试图模仿应用程序的行为,因此 ...

  4. yii2中自定义验证规则rules

    作者:白狼 出处:www.manks.top/article/yii2_custom_rules 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...

  5. JAVASE 面试总结(1)

    1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"?Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码 ...

  6. maven学习讲解

    参考链接:http://www.cnblogs.com/bigtall/archive/2011/03/23/1993253.html 1.前言 Maven,发音是[`meivin],"专家 ...

  7. CSS之column语法

    columns column-width:[<length>|auto] 定义每栏的宽度 column-span:1|all 1:只在本栏中显示:all:横跨所有栏目并定位在栏目的Z轴之上 ...

  8. JAVA&#183;多线程:线程优先级

    每次结果不尽相同,优先级不能完全保证! package multiThread; public class Thread04Priority { public static void main(Str ...

  9. NotifyIcon制作任务栏托盘菜单

    常用软件飞信.QQ在任务栏中的图标ICO,以及鼠标移动到图标是右键菜单选项 1.首先制作任务栏图标 this.ShowInTaskbar = true; 2.窗体最小化时或者关闭时隐藏到任务栏,有时候 ...

  10. VO,DTO,DO,PO的划分

    实体类(VO,DTO,DO)的划分   经常会接触到VO,DO,DTO的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,VO对应 ...