元素定位及其他操作

0、常见的识别元素的方法是什么?

 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定位失败,哪个可行使用哪个。

1、下拉框


 #两种方式实现下拉框的选择操作
from selenium import webdriver
from selenium.webdriver.support.select import Select driver = webdriver.Firefox()
driver.get("file:///C:/Users/hanxiaobei/Desktop/1.html")
ele = driver.find_element_by_xpath(".//*[@id='status']")
# Select(ele).select_by_index() #下标形式选择
Select(ele).select_by_value("") #源码value值相对应方式 '''html
<select id="status" class="form-control valid" onchange="" name="status">
<option value=""></option>
<option value="">未审核</option>
<option value="">初审通过</option>
<option value="">复审通过</option>
<option value="">审核不通过</option>
</select>
'''
另一种下拉框的编写形式:
20 driver.find_element_by_xpath("//*[@id='status']/option[3]").click() #初审通过
21 driver.find_element_by_xpath("//option[@value='1']").click() #初审通过


 2、文本域及富文本框

一般用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)

 3、鼠标操作

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()

4、一组元素的定位

 #一组元素的定位
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()

5、弹窗

alert弹窗
 driver.find_element_by_id("alert").click()  #定位并点击
time.sleep()
alert = driver.switch_to_alert() #切换到弹窗上
print(alert.text) #打印弹窗信息
alert.accept() #确定
#alert.dismiss() #取消
comfrim确认框
 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弹窗
 driver.find_element_by_id("prompt").click()  #定位并点击弹出弹窗
prompt = driver.switch_to_alert() #切换并定位到弹窗
print(prompt.text) #打印弹窗上的信息
prompt.send_keys("我爱你你可知道") #输入内容
prompt.accept() #确认
# prompt.dismiss() #取消

6、多窗口处理


 curr_handle = driver.current_window_handle     #获得当前句柄
print("curr_handle=",curr_handle) #打印当前句柄
time.sleep()
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()
curr_handle1 = driver.current_window_handle
print("curr_handle1=",curr_handle1)
print(driver.title) #打印title
driver.quit()

7、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('显示出来啦!')")

8、frame

 第一种方式是switch_to_frame
driver.find_element_by_link_text("frame1").click()
driver.switch_to_frame("frame2") #通过id定位
# driver.switch_to_frame("myframe") #通过name定位
driver.find_element_by_link_text("我就是我不一样的烟火").click() #我为自己代言为frame1的超文本链接 第二种方式是switch_to.frame
driver.switch_to.frame("iframe2") #切到frame中
driver.switch_to.parent_frame() #从子frame切回到父frame
driver.switch_to.default_content() #从frame中切回主文档

9、文件上传 

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

10、文件下载

 import os
from selenium import webdriver fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList",)
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示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载的更多相关文章

  1. Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

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

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

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

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

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

  4. selenium java 文件上传、下载

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

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

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

  6. tp5下的文件上传与下载类

    class FieldInterfun extends Controller { /** * [upload 上传文件] * @param [type] $file [description] * @ ...

  7. php实现文件上传,下载的常见文件配置

    配置文件,php.ini uploadfile  post_max_size 规定表单上传的最大文件:

  8. linux下安装简单的文件上传与下载工具 lrzsz

    编译安装 1.从下面的网站下载 lrzsz-1.12.20.tar.gz wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 2.查看里面的I ...

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

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

随机推荐

  1. 记一次调试python内存泄露的问题

    转载:http://www.jianshu.com/p/2d06a1a01cc3 这两天由于公司需要, 自己编写了一个用于接收dicom文件(医学图像文件)的server. 经过各种coding-de ...

  2. AIM Tech R3 div2 E Centroid

    思路很明显了,假设是点x,则看它的子树中是否有大于n/2的,如果有,则在该子树中剪去它可以剪的且小于n/2的,接到点x上. 则统计出在以x点为根的子树中,它的各子树可以剪去的且小于n/2的最大子子树. ...

  3. golang convert integer to float number

    There is no float type. Looks like you want float64. You could also use float32 if you only need a s ...

  4. 用Java开发50个棋类游戏

    眼下已经开发完了两个 1A2B 24点 打算开发以下的.直接在QQ上玩. QQ机器人已经有了.我们直接写业务即可.有兴趣的參与.机器人婷婷体验群 Java技术交流 207224939 四棋 小枪大炮 ...

  5. iOS下JSON反序列化开源库

    iOS下JSON字符串反序列化成对象.在正式的项目中比較常见.例如以下几个经常使用开源库.能够依据个人喜好任选其一: 1. JSONModel: https://github.com/icanzilb ...

  6. xode5.1.1设置IOS欢迎界面的方法

    先准备3张不同尺寸的欢迎图.文件名称分别为: Default.png  iPhone 320X480分辨率屏幕默认启动图片. Default@2x.png iPhone 640X960分辨率屏幕默认启 ...

  7. 动态JSP的了解

    一.JSP与HTML的根本区别 1..JSP(Java Server Page)页面是动态页,JSP页面是有JSP容器执行该页面的Java代码部分然后实时生成的HTML页面,因而说是动态页面.2..H ...

  8. ACdream 1412 DP+排列组合

    2-3 Trees Problem Description 2-3 tree is an elegant data structure invented by John Hopcroft. It is ...

  9. ZOJ Design the city LCA转RMQ

    Design the city Time Limit: 1 Second      Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...

  10. 【bzoj1042】[HAOI2008]硬币购物

    首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案. 为了避免重复的方案被转移,所以我们以硬币种类为第一层循环,这样阶段性的增加硬币. 一定要注意这个第一层循环要 ...