Selenium3+python3自动化(十七)--处理富文本:切换iframe、js处理;操作完富文本,提交一次不成功,必须提交2次

前言

富文本编辑框是做web自动化最常见的场景,本篇以开源系统OPMS的添加新项目为例,解决如何定位富文本,输入文本内容

一、登录

# coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
host="http://47.98.186.11:8088"
driver.get(host+"/login")
driver.implicitly_wait(5)
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_xpath("//div/button[@type='submit']").click()  

二、进入添加新项目界面,并填写部分内容

driver.find_element_by_xpath("//li/a[@href='/project/manage']/span").click()
driver.implicitly_wait(5)
driver.find_element_by_link_text("+新项目").click()
driver.find_element_by_name("name").send_keys("测试0830")
driver.find_element_by_name("aliasname").send_keys("test")  

三、iframe切换

1.定位iframe元素

2.switch_to.iframe()切换

#定位iframe
f=driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(f)  

四、输入正文

1.定位正文位置并输入内容,这里和普通的输入框输入是一样的。

driver.find_element_by_tag_name("body").send_keys("富文本我搞定了,耶")  

五、释放iframe,并提交

#释放iframe
driver.switch_to.default_content()
driver.find_element_by_xpath("//div/button[@type='submit']").click()

 参考代码:

# coding:utf-8
from selenium import webdriver
driver=webdriver.Chrome()
host="http://47.98.186.11:8088"
driver.get(host+"/login")
driver.implicitly_wait(5)
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_xpath("//div/button[@type='submit']").click()
driver.implicitly_wait(5)
driver.find_element_by_xpath("//li/a[@href='/project/manage']/span").click()
driver.implicitly_wait(5)
driver.find_element_by_link_text("+新项目").click()
driver.implicitly_wait(5)
driver.find_element_by_name("name").send_keys("测试08301")
driver.find_element_by_name("aliasname").send_keys("test")
#定位iframe
f=driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(f)
driver.find_element_by_tag_name("body").send_keys("富文本我搞定了,耶")
#释放iframe
driver.switch_to.default_content()
driver.find_element_by_xpath("//div/button[@type='submit']").click()

 -----------------------------------------------

六、下面使用js处理富文本

参考:https://www.runoob.com/jsref/met-document-getelementbyid.html

注意:HTML DOM定义了多种查找元素的方法,除了getElementById()之外,还有getElementsByName() 和 getElementsByTagName();

getElement返回的是一个对象的引用;getElements返回的是一个对象集合,取返回的第一个对象使用[0],若是不加[0],则报错'documet' undefined

#js
js="window.document.getElementsByTagName('iframe')[0].contentWindow.document.body.innerHTML='{}'".format("js填写的富文本")
driver.execute_script(js)

 参考代码:

# coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
host="http://47.98.186.11:8088"
driver.get(host+"/login")
driver.implicitly_wait(5)
driver.find_element_by_name("username").send_keys("libai")
driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_xpath("//div/button[@type='submit']").click()
driver.implicitly_wait(10)
driver.find_element_by_xpath("//li/a[@href='/project/manage']/span").click()
time.sleep(3)
# driver.find_element_by_link_text("+新项目").click()
driver.find_element_by_xpath("//div[@class='page-heading']/div/a[@href='/project/add']").click()
time.sleep(3)
driver.find_element_by_name("name").send_keys("测试0830项目1")
driver.find_element_by_name("aliasname").send_keys("test")
# #定位iframe
# f=driver.find_element_by_tag_name("iframe")
# driver.switch_to.frame(f)
# driver.find_element_by_tag_name("body").send_keys("富文本我搞定了,耶")
#js
js="window.document.getElementsByTagName('iframe')[0].contentWindow.document.body.innerHTML='{}'".format("js填写的富文本")
driver.execute_script(js)
# #释放iframe
# driver.switch_to.default_content()
driver.find_element_by_xpath("//div/button[@type='submit']").click()
driver.find_element_by_xpath("//div/button[@type='submit']").click()

 注意:这里提交了2次,提交1次,未成功保存该新增项目,显示界面如下;

=======================================================================

禅道提交bug,js操作富文本内容

#coding:utf-8
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http://localhost/zentaopms/www/user-login.html")
driver.find_element_by_id("account").send_keys("admin")
driver.find_element_by_name("password").send_keys("P@ssw0rd")
driver.find_element_by_id("submit").click()
time.sleep(3)
#点击测试
driver.find_element_by_xpath("//nav[@id='navbar']/ul/li[4]/a").click()
time.sleep(2)
#点击bug
driver.find_element_by_xpath("//nav[@id='subNavbar']/ul/li/a").click()
#提bug
driver.find_element_by_xpath("//div[@id='mainMenu']/div[3]/a[3]").click()
js='document.getElementsByClassName("ke-edit-iframe")[0].contentWindow.document.body.innerHTML="{}"'.format("你错了")
driver.execute_script(js)

越努力,越幸运!!! good good study,day day up!!!
原文地址:https://www.cnblogs.com/canglongdao/p/13585477.html