元素识别方法、一组元素定位、鼠标操作、多窗口处理、下拉框、文本域及富文本框、弹窗、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. 常用Linux命令-文件上传和下载

    rz 上传本地文件到远程服务器 sz fileName 下载文件到本地电脑 如果不能使用以上命令进行文件上传和下载需要安装命令,步骤如下: 1.软件安装1)编译安装root 账号登陆后,依次执行以下命 ...

  3. 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)

    目录 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载) Http协议简述 HttpRequest类设计 请求部分 接收部分 关于上传和下载 Cpp实现 关于源码中的Lo ...

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

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

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

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

  6. java selenium常用API(WebElement、iFrame、select、alert、浏览器窗口、事件、js) 一

     WebElement相关方法 1.点击操作 WebElement button = driver.findElement(By.id("login")); button.clic ...

  7. selenium java 文件上传、下载

    1.webdriver对页面文件的下载 我们一般操作浏览器下载时会让我们选择下载的目录然后经过一系列操作后才进行文件下载操作,但是用webdriver不能按这样的方式操作.经过查询资料找到了如下的实现 ...

  8. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  9. linux常用命令(二)文件上传下载及软件安装

    1.上传下载工具安装 (1)WINDOWS 到linux的文件上传及下载: windows下打开secureCRT,通过SSH连到⾄至远程linux主机:上传下载工具安装命令:yum -y insta ...

随机推荐

  1. bzoj4137 [FJOI2015]火星商店问题

    比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度O(NlogN^2)但是因为线段树每个节点都要套个字典树, ...

  2. AIX配置时间服务器(NTP)

    xntpd是关于网络时间协议的守护进程,它遵循了因特网时间服务器的通用标准.在启动 xntpd 时, xntpd 会读取 /etc/ntp.conf 配置文件来确定网络中系统时钟服务器,以 ntp 服 ...

  3. Mysql创建函数时报错

    先去查询  show variables like '%func%' ; 这个语句,如果该语句最后输出的值是OFF 那么就用下面的语句去修改就可以:set global log_bin_trust_f ...

  4. 让资源可以下载a

    第一种方式------不存在任何兼容性 <a href='x.zip'>下载</a> 将要链接的资源进行打包即可 第二种方式----存在兼容性,目前只有Chrome 和Fire ...

  5. 内网转发ngrok的使用

    1.下载解压ngrok:https://ngrok.com/download 2.执行ngrok会打开控制台 3.输入命令,开始映射本地的8080端口 ngork http 8080 控制台会返回一个 ...

  6. npm常用命令及版本号浅析

    npm 包管理器的常用命令 测试环境为node>=8.1.3&&npm>=5.0.3 1, 首先是安装命令 //全局安装 npm install 模块名 -g //本地安装 ...

  7. java 多线程 Callable -- 分段处理一个大的list 然后再合并结果

    本文代码参考 http://bbs.csdn.net/topics/391070227?page=1 下面是贴出的代码: public void dealListWithMutiThread(){ L ...

  8. 关于pycharm安装出现的interpreter field is empty,无法创建项目存储位置

    关于pycharm安装出现的interpreter field is empty(解释器为空) 关于pycharm安装出现的interpreter field is empty,无法创建项目存储的位置 ...

  9. PCH 警告:标头停止点不能位于宏或#if块中

    今天在vs2010写了点代码,居然报了“PCH 警告:标头停止点不能位于宏或#if块中”. /********************* * * * 文件夹: ▲01 绪论 * * * * 文件名: ...

  10. JQuery 实现导航菜单的高亮显示

    需求是这样的 点击不同的导航菜单实现当前点击的菜单是高亮的,点击导航下面的某个分类,分类所属的导航也必须是高亮的,点击某一篇文章,文章所属的导航菜单也必须是高亮的. 网上说的思路是这样的: 在菜单层的 ...