ui自动化之selenium操作(五)简单元素操作--续

1. 多窗口切换

有时候需要在多窗口切换,webdriver提供了switch_to_window()方法支持切换窗口;

from selenium import webdriver
import os,time
driver = webdriver.Chrome()
frist_url = "http://www.baidu.com"
driver.get(frist_url)
#获取百度登录窗口句柄
login_windows = driver.current_window_handle
driver.find_element_by_link_text(u"登录").click()
driver.find_element_by_id("jgwab").click()

# 获取当前已打开所有窗口的句柄
all_handles = driver.window_handles
for handles in all_handles:
    if handles == login_windows:
        driver.switch_to_window(handles)
        driver.find_element_by_xpath("//*[@id=‘TANGRAM__PSP_2__closeBtn‘]").click()
        print("当前页面标题是:",driver.title)
    else:
        driver.switch_to_window(handles)
        print("新打开页面的标题是:", driver.title)

脚本的实现思路:

先获取到打开页面的窗口句柄,然后新打开一个页面;获取到所有窗口的句柄;在所有窗口句柄中循环,如果句柄=百度的窗口句柄,就是百度页面,操作百度页面元素;否则就是新打开的页面,输入页面标题;

这里我们用到了几种新的方法:

current_window_handle #获取当前页面的句柄
window_handles             #获取所有窗口的句柄
switch_to_window           #切换窗口

2. 警告框处理

实际工作中我们会碰到弹窗提示的情况(alert、confirm、prompt),在webdriver中我们会使用switch_to_alert()方法定位,然后使用text/accept/dismiss/send_keys按需操作;

  • text 返回alert、confirm、prompt的文字信息;
  • accept 点击确认按钮;
  • dismiss 点击取消按钮;
  • send_keys 输入值(没有对话框就不要用了,会报错);
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import os,time
driver = webdriver.Chrome()
frist_url = "http://www.baidu.com"
driver.get(frist_url)

link = driver.find_element_by_link_text(u"设置")
#设置鼠标悬停
ActionChains(driver).move_to_element(link).perform()
#打开搜索设置
driver.find_element_by_class_name("setpref").click()
time.sleep(2)
#点击保存设置按钮
driver.find_element_by_xpath(‘//*[@id="gxszButton"]/a[1]‘).click()
time.sleep(2)
#关闭弹框
driver.switch_to_alert().accept()

3. 上传文件

web页面的上传一般有以下几种方式:

普通上传:

普通的附件上传都是将本地文件的路径作为一个值放到input标签中,通过form表单提交的时候将将这个值提交给服务器。

插件上传:

一般指基于Flash与javascript或Ajax等技术实现的上传功能或插件。

3.1 send_keys上传

通过input标签实现的上传,可以将其看成是一个输入框,通过send_keys传入本地文件路径从而模拟上传功能;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div class="row_filuid">
        <div class="span6 well">
            <h3>upload_file</h3>
            <input type="file" name="file"/>
        </div>
    </div>
</body>
</html>

upfile.html

from selenium import webdriver
import os,time
driver = webdriver.Chrome()
#打开上传页面
file_path = "file:///" + os.path.abspath(‘upfile.html‘)
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys("E:\\Jira的安装及配置.docx")
driver.quit()

3.2 Autoit上传

Autoit用于windowsGUI进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。

官方地址:https://www.autoitscript.com/site/

安装后我们可以看到以下文件:

  • Autoit windows info 帮助我们识别windows控件信息;
  • Compile Script to.exe 用于将Autoit生成exe执行文件;
  • Run script 用于执行Autoit脚本;
  • SciTE Script Editor 用于编写Autoit脚本;

1)访问upfile.html页面,点击选择文件,显示上传弹窗;

2)打开Autoit windows info(可选择x64 x86);

3)将finder Tool拖到文件名下拉框获取文件名控件信息:

4)识别打开按钮控件信息:

5)通过上面两个步骤我们可以获取到以下信息:

页面标题:打开;

页面class:#32770

文件名输入框的class是:"Edit",Instance是1,classnameNN是"Edit1";

打开按钮的class是:Button,instance是1,classnameNN是"Button1";

6)SciTE Script Editor编写脚本:

ControlFocus("打开","","Edit1")

WinWait("[CLASS:#32770]","",10)

ControlSetText("打开","","Edit1","E:\\Jira的安装及配置.docx")
Sleep(2000)
ControlClick("打开","","Button1");

7)校验脚本是否成功:

打开upfile.html页面,点击选择文件按钮显示选择文件弹出框,F5运行刚编写的文件-------可以正常将文件名字放到文件名选择框中;

8)将脚本保存,命名为upfile.au3;

9)打开Compile Script to.exe,选择刚保存的脚本文件转换成exe文件;

10)自动化脚本调用upfile.exe文件;

from selenium import webdriver
import os,time
driver = webdriver.Chrome()
#打开上传页面
file_path = "file:///" + os.path.abspath(‘upfile.html‘)
driver.get(file_path)
#点击打开上传窗口
driver.find_element_by_name("file").click()
#调用upfile.exe上传程序
os.system("E:\\upfile.exe")
driver.quit()

4. 下载文件

4.1 firefox文件下载

对于Firefox,需要我们设置其Profile:

  • browser.download.dir:指定下载路径;
  • browser.download.folderList:设置成 2 表示使用自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径;
  • browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器;
  • browser.helperApps.neverAsk.saveToDisk:对所给出文件类型不再弹出框进行询问;

下面来个示例:

from selenium import webdriver
from time import sleep

profile = webdriver.FirefoxProfile()
profile.set_preference(‘browser.download.dir‘, ‘D:\\‘)
profile.set_preference(‘browser.download.folderList‘, 2)
profile.set_preference(‘browser.download.manager.showWhenStarting‘, False)
profile.set_preference(‘browser.helperApps.neverAsk.saveToDisk‘, ‘application/zip‘)

driver = webdriver.Firefox(firefox_profile=profile)

driver.get(‘http://sahitest.com/demo/saveAs.htm‘)
driver.find_element_by_xpath(‘//a[text()="testsaveas.zip"]‘).click()
sleep(3)
driver.quit()

Firefox需要针对每种文件类型进行设置,这里需要我们查询对应文件的MIME类型,可以用以下链接进行查询:MIME 参考手册

4.2 chrome文件下载

Chrome浏览器类似,设置其options:

  • download.default_directory:设置下载路径
  • profile.default_content_settings.popups:设置为 0 禁止弹出窗口

它的设置就简单多了,看个示例:

from selenium import webdriver
from time import sleep

options = webdriver.ChromeOptions()
prefs = {‘profile.default_content_settings.popups‘: 0, ‘download.default_directory‘: ‘D:\\‘}
options.add_experimental_option(‘prefs‘, prefs)

driver = webdriver.Chrome(executable_path=‘C:\\Users\\jhon\\AppData\\Local\\Programs\\Python\\Python35-32\\chromedriver.exe‘, chrome_options=options)
driver.get(‘http://sahitest.com/demo/saveAs.htm‘)
driver.find_element_by_xpath(‘//a[text()="testsaveas.zip"]‘).click()
sleep(3)
driver.quit()

5. 操作cookie

6. 调用javascript

7. 窗口截图&关闭窗口

8. 验证码处理

9. webdriver原理

时间: 2024-10-11 03:47:46

ui自动化之selenium操作(五)简单元素操作--续的相关文章

selenium学习:简单元素操作

WebDriver中常用方法: clear()  清除文本 send_keys(*value) 模拟按键输入 click()     单机元素 网站的登陆 from selenium import webdriver from time import * driver = webdriver.Chrome() url = "https://login.huawei.com/login/?redirect=http%3A%2F%2Fw3.huawei.com%2Fnext%2Findexa.htm

webdriervAPI(控制浏览器及简单元素操作)

from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.com") 控制窗口大小 (480)表示浏览器的宽,(800)表示浏览器的高 driver.set_window_size(480, 800) 控制浏览器的前进与后退 driver.back() 后退 driver.forward() 前进 模拟浏览器刷新 driver.refresh() 刷新当前页面

UI自动化和selenium相关以及八大定位

一.UI自动化相关 1. UI自动化的本质(重点) 定位元素→操作元素→模拟页面操作→断言→测试报告 2. 适合UI自动化的场景 UI自动化的前提条件 (1)需求不能频繁变动 (2)UI稳定(UI自动化就是基于UI层面的,UI界面总变化无法开展) (3)项目周期长(UI自动化脚本编写和调试耗时,项目周期短纯手工更高效) (4)回归测试频繁(回归测试多就会有不断的主流程功能需要回归,自动化更高效) 适用场景 (1)冒烟测试 (2)主功能回归测试 3. UI自动化的原则 (1)一个case完成一个功

UI自动化测试之selenium(1)——selenium中的常用api

目录 1 对浏览器操作1.1 用webdriver打开一个浏览器1.2 最大化浏览器&关闭浏览器1.3 设置浏览器窗口大小1.4 打开测试页面1.5 处理浏览器弹出的新窗口2 页面元素定位3 如何对页面元素进行操作3.1 WebElement相关方法3.2 iFrame的处理3.3 输入框(text field or textarea)3.4 下拉选择框(Select)3.5 单选项(Radio Button)3.6 多选项(checkbox)3.7 按钮(button)3.8 处理Alert3

简单元素操作.py

#清除文本:clear() #模拟按键输入:send_keys(*value) #点击元素:click() #回车/提交表单:submit() #获取输入框尺寸:from selenium import webdriverdriver = webdriver.Chrome()size = driver.find_element_by_id("kw").size #获取元素的文本信息:text = driver.find_element_by_id("cp").tex

2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理

 Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan/article/details/39565783 如果行想进数据库开发,需要安装libqt5sql5-mysql.命令是: sudo apt-get install libqt5sql5-mysql 4 创建一个项目 要调用数据库,需要加上QT += gui widgets sql  也就是说要加

selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)

上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw").clear() #文本框清空 find_element_by_id("kw").send_keys("selenium") #文本框输入 find_element_by_id("button").click() #点击按钮操作 (2)webElem

java selenium (九) 常见web UI 元素操作 及API使用

链接(link) <div> <p>链接 link</p> <a href="www.cnblogs.com/tankxiao">小坦克</a> </div> 链接的操作 // 找到链接元素 WebElement link1 = driver.findElement(By.linkText("小坦克")); WebElement link11 = driver.findElement(By.pa

UI自动化之——元素定位

一.概述 UI自动化要做的就是模拟鼠标和键盘对元素进行操作,单击.输入或鼠标悬停等操作,所有的这些操作都建立在找到元素的基础上,下面说一下,selenium的八大元素定位,重点说一下xpath元素定位. 二.selenium的八大元素定位 2.1 id定位 find_element_by_id() # 通过id属性来定位元素 2.2 name定位 find_element_by_name() # 通过name 属性来定位元素 2.3 class定位 find_element_by_class_n