美文网首页
selenium API 高级操作

selenium API 高级操作

作者: 足__迹 | 来源:发表于2019-07-08 17:49 被阅读0次
    
    from selenium import webdriver
    from selenium.common.exceptions import WebDriverException,TimeoutException,NoSuchElementException
    import unittest,traceback,time,os
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    
    
    # 更改页面对象的额属性
    def addAttribute(driver, elementobj, attributeName, value):
        #封装向页面标签中添加新属性的方法
        #调用javascript 代码给页面标签添加属性,arguments[0].%s=arguments[1]分别会用后面的element,attributeName
        #和value参数进行替换
        #添加属性 javascript 语法 ;element.attributeName = value
        #例如 input.name = 'test'
        driver.execute_script("arguments[0].%s=arguments[1]" %attributeName, elementobj, value)
    
    def setAttribute(driver, elementobj, attributeName, value):
        #封装设置页面对象的属性值得方法
        #调用javascript代码修改页面元素的属性值 arguments[0]~arguments[2] 分别会用后面的element,attributeName
        #和value参数进行替换
        driver.execute_script("arguments[0].setAttribute(arguments[1],arguments[2])",elementobj, attributeName, value)
    
    
    def get_arribute( elementobj, value):
        #封装获取页面属性值得方法
        return elementobj.get_attribute(value)
    
    
    def removeAttribute(driver, elementobj, attributeName):
        #封装删除页面元素的属性的方法
        #调用javascript 删除页面元素的指定属性 arguments[0]~arguments[2] 分别会用后面的element,attributeName
        #参数进行替换
        driver.execute_script("arguments[0].removeAttribute(arguments[1])",elementobj,attributeName)
    
    class TestDemo(unittest.TestCase):
    
        def setUp(self):
            print('启动chrome')
            self.driver = webdriver.Chrome()
    
        def tearDown(self):
            self.driver.quit()
    
        # 在webDriver脚本代码执行JavaScript代码,来实现对页面元素的操作,此时方式主要用于解决某些情况下与页面元素的click()方法
        # 无法等问题
        def test_executeScript(self):
            url = 'http://www.baidu.com'
            self.driver.get(url)
    
            searfchInputBoxjs = 'document.getElementByid("kw").value=“光荣之路”'
            searfchButtonjs = 'document.getElementByid("su").click()'
    
            try:
                self.driver.execute_script(searfchInputBoxjs)
                time.sleep(2)
                self.driver.execute_script(searfchButtonjs)
                time.sleep(2)
                self.assertEqual('百度百科' in self.driver.page_source)
            except WebDriverException as e:
                print('没有找到元素')
            except AssertionError as e:
                 print('页面不存在断言的关键字')
            except Exception as e:
                print(traceback.print_exc())
    
        #使用JavaScript代码实现下拉框操作
        def test_scroll(self):
            url = 'http://www.docin.com/p-1331019547.html'
            #访问selenium官网首页
            try:
                self.driver.get(url)
                #使用javascript的scroll函数和document.body.scrollHeihgt参数
                #将页面滑动(左右滚动)
                self.driver.execute_script('window.scrollTo(100,document.body.scrollHeihgt);')
                time.sleep(5)
    
                #使用javascript的scrollIntoView函数将被遮挡的元素滚动的元素到可见屏幕上
                # 表示将元素滚动到屏幕底部
                self.driver.execute_script('document.documentElement.scrollTop=10000;')
                time.sleep(5)
                # 表示将元素滚动屏幕顶部
                self.driver.execute_script('document.documentElement.scrollTop=0;')
                time.sleep(3)
    
                #使用javascript的scrollby方法,使用呢0和400横纵坐标参数
                #将页面向下0400元素
                self.driver.execute_script('window.scrollBy(100,400)')
                time.sleep(3)
    
            except Exception as e:
                print(traceback.print_exc())
    
    
        #操作ajax方式产生的浮动框,单击选择包含某个关键字的选项
        #方式1通过键盘操作
        def test_AjaxDivoptionByKeys(self):
            url = 'http://sogou.com/'
            self.driver.get(url)
            searbox = self.driver.find_element(By.ID,'query')
            searbox.send_keys('光荣之路')
            time.sleep(2)
            for i in range(3):
                searbox.send_keys(Keys.DOWN)
                time.sleep(3)
            searbox.send_keys(Keys.ENTER)
            time.sleep(3)
    
        #方法2模糊查询
        def test_AjaxDivoptionBywords(self):
            url = 'http://sogou.com/'
            self.driver.get(url)
            try:
                searbox = self.driver.find_element(By.ID, 'query')
                searbox.send_keys('光荣之路')
                time.sleep(2)
                sugettion_option = self.driver.find_element_by_xpath("//ul/li[contains(.,'电影')]")
                sugettion_option.click()
                time.sleep(3)
            except Exception as e:
                print(traceback.print_exc())
    
        #方法,按照顺序定位
        def test_AjaxDivoptionByIndex(self):
            url = 'http://sogou.com/'
            self.driver.get(url)
            try:
                searbox = self.driver.find_element(By.ID, 'query')
                searbox.send_keys('光荣之路')
                time.sleep(2)
                sugettion_option = self.driver.find_element_by_xpath("//*[@id='vl']/div[1]/ul/li[4]")
                sugettion_option.click()
                time.sleep(3)
            except Exception as e:
                print(traceback.print_exc())
    
        #结束window中浏览器的进程
        def test_killWindowProcess(self):
            import os
            returncode = os.system("taskkill /F /iM chrome.exe")
            if returncode== 0 :
                print('结束浏览器')
            else:
                print('结束失败')
    
    
        #对页面元素的增加,修改,删除都是临时的,当前会话结束后失效
        def test_dataPicker(self):
            url = 'F:\gitstorehouse\selenium3.0\webdriverAPI接口\测试页面\更改一个页面对象的属性值.html'
            self.driver.get(url)
            #定位元素位置
            element = self.driver.find_element_by_xpath('//*[@id="text"]')
           #向文本框中的input标签添加新元素name = ‘sratch"’
            addAttribute(self.driver,element,'name',"sratch")
            print(get_arribute(element,'name'))
    
            #查看修改前input 元素中value的属性值
            print(get_arribute(element,'value'))
            #更改元素value的属性值
            setAttribute(self.driver,element,'value','修改后的文字内容')
            #查看修改后的顺序属性值
            print(get_arribute(element, 'value'))
    
            # 查看修改前input 元素中size的属性值
            print(get_arribute(element, 'size'))
            # 更改元素value的属性值
            setAttribute(self.driver, element, 'size', '20')
            time.sleep(2)
            # 查看修改后的顺序属性值
            print(get_arribute(element, 'size'))
    
    
            #查看删除input页面元素value属性value属性值
            print(get_arribute(element,'value'))
            #删除文本框value的值
            removeAttribute(self.driver,element,'value')
            #删除后查看属性value的值
            print('删除后的属性值',get_arribute(element,'value'))
    
        #无人工干预下自动下载某个文件
    
        # def test_dataPicker(self):
        #      url = "www.baidu.com"
        #      self.driver  = webdriver.Firefox()
        #      self.driver.get(url)
    
    
        #无人干预上传文件
        def test_uploadFileBySendKeys(self):
            url = 'F:\gitstorehouse\selenium3.0\webdriverAPI接口\测试页面\上传文件.html'
            self.driver.get(url)
            try:
                #创建一个显示等待
                wait = WebDriverWait(self.driver,5,0.5)
                #判断被测上传按钮是否处于克点击状态
                wait.until(EC.element_to_be_clickable((By.ID,'file')))
            except TimeoutException as e:
                traceback.print_exc()
            except NoSuchElementException as e:
                traceback.print_exc()
            except Exception as e:
                traceback.print_exc()
            else:
                fileb0x =  self.driver.find_element(By.XPATH,'//*[@id="file"]')
                #在文件上传框输入文件目录
                fileb0x.send_keys('F:\gitstorehouse\selenium3.0\webdriverAPI接口\测试页面\javaScript的alert弹框.html')
                time.sleep(4)
                #定位提交按钮,
                filesumbitButton = self.driver.find_element(By.ID,'filesubmit')
                #点击提交按钮完成文件上传操作
                filesumbitButton.click()
    
            #使用第三方Autoit 上传文件
    
        def test_uploadfileByAutoit(self):
            url = 'F:\gitstorehouse\selenium3.0\webdriverAPI接口\测试页面\上传文件.html'
            self.driver.get(url)
            try:
                # 创建一个显示等待
                wait = WebDriverWait(self.driver, 5, 0.5)
                # 判断被测上传按钮是否处于克点击状态
                wait.until(EC.element_to_be_clickable((By.ID, 'file')))
            except TimeoutException as e:
                traceback.print_exc()
            except NoSuchElementException as e:
                traceback.print_exc()
            except Exception as e:
                traceback.print_exc()
            else:
                fileb0x = self.driver.find_element(By.XPATH, '//*[@id="file"]')
                # 点击调出文件上传框
                fileb0x.click()
                #通过os模块执行system方法执行生成的test.exe文件
                os.system('D:\\test.exe')
                time.sleep(5)
                filesumbitButton = self.driver.find_element(By.ID, 'filesubmit')
                # 点击提交按钮完成文件上传操作
                filesumbitButton.click()
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:selenium API 高级操作

          本文链接:https://www.haomeiwen.com/subject/lvmahctx.html