python webdriver api-操作富文本框
操作富文本框-就是邮件正文部分,可以选字体啥的
第一种方式:
一般都是在iframe里,要切进去,一般是”html/body”,编辑之后,再切出来,然后再send_keys就完事儿
#encoding=utf-8
from selenium import webdriver
import unittest, time, traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
class TestDemo(unittest.TestCase):
def setUp(self):
# 启动Firefox浏览器
#self.driver = webdriver.Ie(executable_path = "e:\\IEDriverServer")
self.driver = webdriver.Firefox(executable_path="c:\\geckodriver")
def test_SohuMailSendEMail(self):
url = "http://mail.sohu.com"
# 访问搜狐邮箱登录页
self.driver.get(url)
try:
userName = self.driver.find_element_by_xpath\
(u'//input[@placeholder="请输入您的邮箱"]')
userName.clear()
userName.send_keys("fosterwu")
passWord = self.driver.find_element_by_xpath\
(u'//input[@placeholder="请输入您的密码"]')
passWord.clear()
passWord.send_keys("1111")
login = self.driver.find_element_by_xpath(u'//input[@value="登 录"]')
login.click()
wait = WebDriverWait(self.driver, 10)
# 显示等待,确定页面是否成功登录并跳转到登录成功后的首页
wait.until(EC.element_to_be_clickable\
((By.XPATH, '//li[text()="写邮件"]')))
self.driver.find_element_by_xpath(u'//li[text()="写邮件"]').click()
time.sleep(2)
receiver = self.driver.find_element_by_xpath\
('//div[@arr="mail.to_render"]//input')
# 输入收件人
receiver.send_keys("fosterwu@sohu.com")
subject = self.driver.find_element_by_xpath\
('//input[@ng-model="mail.subject"]')
# 输入邮件标题
subject.send_keys(u"一封测试邮件!")
# 获取邮件正文编辑区域的iframe页面元素对象
iframe = self.driver.find_element_by_xpath\
('//iframe[contains(@id, "ueditor")]')
# 通过switch_to.frame()方法切换进入富文本框中
self.driver.switch_to.frame(iframe)
# 获取富文本框中编辑页面元素对象
editBox = self.driver.find_element_by_xpath("/html/body")
# 输入邮件正文
editBox.send_keys(u"邮件的正文内容")
# 从富文本框中切换出,回到默认页面
self.driver.switch_to.default_content()
# 找到页面上的“发送”按钮,并单击它
self.driver.find_element_by_xpath('//span[.="发送"]').click()
# 显示都等待含有关键字串“发送成功”的页面元素出现在页面中
wait.until(EC.visibility_of_element_located\
((By.XPATH, '//span[.="发送成功"]')))
print u"邮件发送成功"
except TimeoutException:
print u"显示等待页面元素超时"
except NoSuchElementException:
print u"寻找的页面元素不存在", traceback.print_exc()
except Exception:
# 打印其他异常堆栈信息
print traceback.print_exc()
def tearDown(self):
# 退出IE浏览器
self.driver.quit()
if __name__ == '__main__':
unittest.main()
D:\test>python test.py
邮件发送成功
.
----------------------------------------------------------------------
Ran 1 test in 58.226s
OK
第二种方法:
切到iframe里,然后执行js的方式,找到这个元素,(三种方式:d,名字,标签名—)
#encoding=utf-8
from selenium import webdriver
import unittest, time, traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
class TestDemo(unittest.TestCase):
def setUp(self):
# 启动Firefox浏览器
#self.driver = webdriver.Firefox(executable_path="c:\\geckodriver")
self.driver = webdriver.Firefox(executable_path = "d:\\geckodriver")
def test_SohuMailSendEMail(self):
url = "http://mail.sohu.com"
# 访问搜狐邮箱登录页
self.driver.get(url)
try:
userName = self.driver.find_element_by_xpath\
('//input[@placeholder="请输入您的邮箱"]')
userName.clear()
userName.send_keys("fosterwu")
passWord = self.driver.find_element_by_xpath\
('//input[@placeholder="请输入您的密码"]')
passWord.clear()
passWord.send_keys("1111")
login = self.driver.find_element_by_xpath('//input[@value="登 录"]')
login.click()
wait = WebDriverWait(self.driver, 10)
# 显示等待,确定页面是否成功登录并跳转到登录成功后的首页
wait.until(EC.element_to_be_clickable\
((By.XPATH, '//li[text()="写邮件"]')))
self.driver.find_element_by_xpath('//li[text()="写邮件"]').click()
time.sleep(2)
receiver = self.driver.find_element_by_xpath\
('//div[@arr="mail.to_render"]//input')
# 输入收件人
receiver.send_keys("fosterwu@sohu.com")
subject = self.driver.find_element_by_xpath\
('//input[@ng-model="mail.subject"]')
# 输入邮件标题
subject.send_keys(u"一封测试邮件!")
# 获取邮件正文编辑区域的iframe页面元素对象
iframe = self.driver.find_element_by_xpath\
('//iframe[contains(@id, "ueditor")]')
# 通过switch_to.frame()方法切换进入富文本框中
self.driver.switch_to.frame(iframe)
# 通过JavaScript代码向邮件正文编辑框中输入正文
self.driver.execute_script("document.getElementsByTagName('body')\
[0].innerHTML='<b>邮件的正文内容<b>;'")
# 从富文本框中切换出,回到默认页面
self.driver.switch_to.default_content()
# 找到页面上的“发送”按钮,并单击它
self.driver.find_element_by_xpath('//span[.="发送"]').click()
# 显示都等待含有关键字串“发送成功”的页面元素出现在页面中
wait.until(EC.visibility_of_element_located\
((By.XPATH, '//span[.="发送成功"]')))
print u"邮件发送成功"
except TimeoutException:
print u"显示等待页面元素超时"
except NoSuchElementException:
print u"寻找的页面元素不存在", traceback.print_exc()
except Exception:
# 打印其他异常堆栈信息
print traceback.print_exc()
def tearDown(self):
# 退出IE浏览器
self.driver.quit()
if __name__ == '__main__':
unittest.main()
D:\test>python test.py
邮件发送成功
.
----------------------------------------------------------------------
Ran 1 test in 49.789s
OK
第三种方法:键盘事件,用tab键切换到frame区域,推荐使前两种方法
#encoding=utf-8
from selenium import webdriver
import unittest, time, traceback
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import win32clipboard as w
import win32api, win32con
# 用于设置剪切板内容
def setText(aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard()
# 键盘按键映射字典
VK_CODE = {'ctrl':0x11, 'v':0x56}
# 键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
# 键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0)
class TestDemo(unittest.TestCase):
def setUp(self):
# 启动Firefox浏览器
self.driver = webdriver.Firefox(executable_path="c:\\geckodriver")
def test_SohuMailSendEMail(self):
url = "http://mail.sohu.com"
# 访问搜狐邮箱登录页
self.driver.get(url)
try:
userName = self.driver.find_element_by_xpath\
('//input[@placeholder="请输入您的邮箱"]')
userName.clear()
userName.send_keys("fosterwu")
passWord = self.driver.find_element_by_xpath\
('//input[@placeholder="请输入您的密码"]')
passWord.clear()
passWord.send_keys("1111")
login = self.driver.find_element_by_xpath('//input[@value="登 录"]')
login.click()
wait = WebDriverWait(self.driver, 10)
# 显示等待,确定页面是否成功登录并跳转到登录成功后的首页
wait.until(EC.element_to_be_clickable\
((By.XPATH, '//li[text()="写邮件"]')))
self.driver.find_element_by_xpath('//li[text()="写邮件"]').click()
time.sleep(2)
receiver = self.driver.find_element_by_xpath\
('//div[@arr="mail.to_render"]//input')
# 输入收件人
receiver.send_keys("xiaxiaoxu1987@163.com")
subject = self.driver.find_element_by_xpath\
('//input[@ng-model="mail.subject"]')
# 输入邮件标题
subject.send_keys(u"一封测试邮件!")
# 输入完邮件标题后,按下Tab键可以将页面焦点切换到富文本框编辑区域
subject.send_keys(Keys.TAB)
# 设置剪切板内容,也就是将要输入的正文内容
setText(u"邮件正文内容")
# 模拟键盘的Ctrl + v组合键,将剪切板内容粘贴到富文本编辑区中
keyDown("ctrl")
keyDown("v")
keyUp("v")
keyUp("ctrl")
# 找到页面上的“发送”按钮,并单击它
self.driver.find_element_by_xpath('//span[.="发送"]').click()
# 显示都等待含有关键字串“发送成功”的页面元素出现在页面中
wait.until(EC.visibility_of_element_located\
((By.XPATH, '//span[.="发送成功"]')))
print u"邮件发送成功"
except TimeoutException:
print u"显示等待页面元素超时"
except NoSuchElementException:
print u"寻找的页面元素不存在", traceback.print_exc()
except Exception:
# 打印其他异常堆栈信息
print traceback.print_exc()
def tearDown(self):
# 退出IE浏览器
self.driver.quit()
if __name__ == '__main__':
unittest.main()
D:\test>python test.py
邮件发送成功
.
----------------------------------------------------------------------
Ran 1 test in 54.255s
OK
python webdriver api-操作富文本框的更多相关文章
- webdriver高级应用- 操作富文本框
富文本框的技术实现和普通的文本框的定位存在较大的区别,富文本框的常见技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构,所以使用普通的定位模式将无法直接定位到富文本框对象. ...
- Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载
元素识别方法.一组元素定位.鼠标操作.多窗口处理.下拉框.文本域及富文本框.弹窗.JS.frame.文件上传和下载 元素识别方法: driver.find_element_by_id() driver ...
- Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载
元素定位及其他操作 0.常见的识别元素的方法是什么? driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用
一.modelForm操作及验证 1.获取数据库数据,界面展示数据并且获取前端提交的数据,并动态显示select框中的数据 views.py from django.shortcuts import ...
- vue集成CKEditor构建框架的使用,遇到富文本框不出现工具栏等操作
官方关于Vue集成CKEditor富文本框的文档:https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/framew ...
- Java + selenium 元素定位(6)之iframe切换(即对富文本框的操作)
在元素定位中,对富文本框的元素定位是特别的,当我们使用普通的元素定位方法对富文本框进行操作时,我们会发现不管我们之前介绍的八种方法中的任何方法,我们都不能成功定位到富文本框,并对其进行操作.那是因为富 ...
- selenium 富文本框处理
selenium 富文本框处理, 网上有用API的解决方法1:参见:http://blog.csdn.net/xc5683/article/details/8963621 群里1位群友的解决方法2:参 ...
- Android 富文本框实现 RichEditText
Android系统自带控件没有富文本框控件,如果想写一封带格式的邮件基本上不可能,EdtiText只有默认一种格式,显示不能滿足要求,!!正好项目需要研究了一下,开发了此控件,现将一些源代码开放一下, ...
- 第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框
第三百九十五节,Django+Xadmin打造上线标准的在线教育平台—Xadmin集成富文本框 首先安装DjangoUeditor3模块 Ueditor HTML编辑器是百度开源的HTML编辑器 下载 ...
随机推荐
- AsycnTask
一.异步任务加载网络数据: 在Android中提供了一个异步任务的类AsyncTask,简单来说,这个类中的任务是运行在后台线程中的,并可以将结果放到UI线程中进行处理,它定义了三种泛型,分别是Par ...
- 《C++ Primer Plus》14.3 多重继承 学习笔记
多重继承(MI)描述的是有多个直接基类的类.与单继承一样,共有MI表示的也是is-a关系.例如,可以从Awiter类和Singer类派生出SingingWaiter类:class SingingWai ...
- Android Intent实现页面之间跳转
什么是IntentIntent可以理解为信使(意图)由Intent来协助完成Android各个组件之间的通讯Intent实现页面逐渐的跳转1.startActivity(inetnt)2.startA ...
- c++11——右值引用
1. 左值和右值 左值是表达式结束之后仍然存在的持久化对象,而右值是指表达式结束时就不再存在的临时对象. c++11中,右值分为两种类型:将亡值(xvalue, expiring value) ...
- 【Thinkphp5】结合layer弹窗 定制操作结果页面
1 打开应用公共文件页面 appliction/common.php,编写以下代码 注意: 成功消息的绿色背景部分是iframe 框架写法,如果是普通页面.就吧parent去除,改为: self ...
- MQTT协议笔记之头部信息
前言 记忆不太好的时候,只能翻看以前的文章/笔记重新温习一遍,但找不到MQTT协议有关订阅部分的描述,好不容易从Evernote中找到贴出来,这样整个MQTT协议笔记,就比较齐全了. SUBSCRIB ...
- OneThink视图模型进行组合查询!文档组合文档详情
测试方法:twoCate: public function twoCate(){ $where = array( 'category_id'=>43 ); $list = D('TwoView' ...
- vue 缓存的keepalive页面刷新数据
用到这个的业务场景是这样的: a页面点击新建列表按钮进入到新建的页面b,填写b页面并点击b页面确认添加按钮,把这些数据带到a页面,填充到列表(数组),可以添加多条, 点击这条的时候进入到编辑页面,确认 ...
- js判断移动端和PC端跳转不同页面
方法一: /* * * 判断PC端与WAP端 */ var mobile_bs = { versions: function() { var u = navigator.userAgent; retu ...
- ubuntu16.04下安装opencv3的viz模块
OPENCV3.0默认是不安装VIZ模块的,那么如何安装呢? 如果已经安装了Opencv,现在要增加VIZ模块,应该再安装一次就可以吧,我没试过,我是卸载了原来的,重新安装的 简单来说,就是要多安装一 ...