zoukankan      html  css  js  c++  java
  • 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: est>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: est>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: est>python test.py

    邮件发送成功

    .

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

    Ran 1 test in 54.255s

     

    OK

  • 相关阅读:
    hdu1865 1sting (递归+大数加法)
    hau1021 Fibonacci Again(递归)
    hdu2553 N皇后问题(dfs+回溯)
    BZOJ2342 [Shoi2011]双倍回文 【manacher】
    Manacher算法学习 【马拉车】
    BZOJ2743 [HEOI2012]采花 【离线 + 树状数组】
    BZOJ1296 [SCOI2009]粉刷匠 【dp】
    BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】
    BZOJ1565 [NOI2009]植物大战僵尸 【最大权闭合子图 + tarjan缩点(或拓扑)】
    BZOJ2157 旅游 【树剖 或 LCT】
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/9206385.html
Copyright © 2011-2022 走看看