元素识别方法、一组元素定位、鼠标操作、多窗口处理、下拉框、文本域及富文本框、弹窗、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. Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载

    元素定位及其他操作 0.常见的识别元素的方法是什么? driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...

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

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

  3. 常用Linux命令-文件上传和下载

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

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

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

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

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

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

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

  7. linux下如何使用sftp命令进行文件上传和下载

    sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP ...

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

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

  9. play-with-docker搭配ffsend完成文件上传及下载(解决从docker hub拉取镜像慢问题)

    由于众所周知的原因,大家有的时候pull docker hub上的镜像是很困难的,下载到99%就这么不动了也是很正常的事情 这个时候以下步骤是100%可以解决问题的: 1.找一台国外的服务器安装doc ...

随机推荐

  1. 【笔记】BFC 模型知识整理

    网上看了很多 BFC 的概念,发现都说得不是很完整和深入,刚好最近看了一些视频教程说到了 BFC 概念所以记录一下. BFC 的概念: BFC 全称:Block format context 块级格式 ...

  2. linux 巨页使用测试

    这里记录测试巨页的mmap使用,测试代码和<linux 巨页使用测试以及勘误1>类似. 跟踪脚本如下: probe kernel.function("hugetlb_reserv ...

  3. DOM4J使用简介

    Dom4j 使用简介 作者:冰云 icecloud(AT)sina.com 时间:2003.12.15   版权声明: 本文由冰云完成,首发于CSDN,未经许可,不得使用于任何商业用途. 文中代码部分 ...

  4. Spring AOP小记

    一.概述 在通常的开发过程中,我们调用的顺序通常是controller->service-dao,其中,service中包含着太多的业务逻辑,并且还要不断调用dao来实现自身的业务逻辑,经常会导 ...

  5. get请求中文乱码及get,post编码探究

    在我使用get请求进行查询的时候遇到一个问题: 当我的请求参数中有中文时,出现乱码. 可是即使我设置了Spring的characterEncodingFilter,也还是出现乱码. 原因:tomcat ...

  6. Windows下Nginx实现负载均衡

    Apache,Nginx Apache和Nginx都属于属于 静态页面服务器,都有插件支持动态编程语言处理,但Nginx的IO模比Apache更适合跑代理.所以一般都作为前端缓冲代理(Nginx的反向 ...

  7. H5WebSocket消息推送

    1.效果图 2.前端代码 @{ ViewBag.Title = "Home Page"; } @*HTML5 WebSocket WebSocket是HTML5开始提供的一种在单个 ...

  8. dl在不同浏览器下显示不同

    dl在chrome浏览器和在火狐浏览器下的默认样式是不一样的,解决方法将dl换成ol或ul样式就正常了.

  9. c# 简单实现 插件模型 反射方式

    利用反射方式实现插件模型,wpf控件作为插件,然后用另外的窗体加载. 首先定义插件接口: public interface IUserControlLevel1 { string PluginName ...

  10. 洛谷 [P1402] 酒店之王

    有两个约束条件的二分图匹配 我们回忆一下二分图匹配的匈牙利算法的具体流程,它是通过寻找增广路来判断最大匹配数的,我们再观察一下题目中的两个条件,只有两个条件都满足,才算找到一条增广路,所以我们可以分别 ...