zoukankan      html  css  js  c++  java
  • Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载

    元素定位及其他操作

    0、常见的识别元素的方法是什么?

    复制代码
    1 driver.find_element_by_id()
    2 driver.find_element_by_name()
    3 driver.find_element_by_class_name()
    4 driver.find_element_by_tag_name()
    5 driver.find_element_by_link_text()
    6 driver.find_element_by_partial_link_text()
    7 driver.find_element_by_xpath()
    8 driver.find_element_by_css_selector()
    复制代码
    web UI自动化测试元素识别的原则是什么?
    如果有唯一的id,就用id定位元素;
    如果没有,最好使用xpath定位;
    如果xpath定位失败,哪个可行使用哪个。

    1、下拉框

    复制代码
     1 #两种方式实现下拉框的选择操作
     2 from selenium import webdriver
     3 from selenium.webdriver.support.select import Select
     4 
     5 driver = webdriver.Firefox()
     6 driver.get("file:///C:/Users/hanxiaobei/Desktop/1.html")
     7 ele = driver.find_element_by_xpath(".//*[@id='status']")
     8 # Select(ele).select_by_index(2) #下标形式选择
     9 Select(ele).select_by_value("2")  #源码value值相对应方式
    10 
    11 '''html
    12 <select id="status" class="form-control valid" onchange="" name="status">
    13     <option value=""></option>
    14     <option value="0">未审核</option>
    15     <option value="1">初审通过</option>
    16     <option value="2">复审通过</option>
    17     <option value="3">审核不通过</option>
    18 </select>
    19 '''
    另一种下拉框的编写形式:
    20 driver.find_element_by_xpath("//*[@id='status']/option[3]").click() #初审通过
    21 driver.find_element_by_xpath("//option[@value='1']").click() #初审通过
    复制代码

     2、文本域及富文本框

    一般用js进行执行,如下示例

    文本域输入:document.getElementById('_ComContent1').innerHTML="xxxxx"
    富文本框输入:document.getElementById('_ComContent1').contentWindow.document.body.innerHTML="xxxxx"

    复制代码
    1 文本域的输入:
    2 js = "document.getElementById('_ComContent1').innerHTML='在超市卖吗'"
    3 element = dr.find_element_by_xpath(".//*[@id='_ComContent1']")
    4 dr.execute_script(js,element)
    5 
    6 富文本框的输入:
    7 js = "document.getElementById('_ComContent1').contentWindow.document.body.innerHTML='在超市卖吗'"
    8 element = dr.find_element_by_xpath(".//*[@id='_ComContent1']")
    9 dr.execute_script(js,element)
    复制代码

     3、鼠标操作

    复制代码
    from selenium.webdriver.common.action_chains import ActionChains 导入控制鼠标事件的方法
    1、#鼠标悬停 mm = driver.find_element_by_link_text("设置") ActionChains(driver).move_to_element(mm).perform()
    #页面显示并可点击的都可以尝试用超级链接
    driver.find_element_by_link_text("搜索设置").click()
    2、#鼠标右击
    right =driver.find_element_by_xpath("xx")
    ActionChains(driver).context_click(right).perform()
    3、#鼠标双击
    double =driver.find_element_by_xpath("xxx")
    ActionChains(driver).double_click(double).perform()
    4、#鼠标拖放
    #定位元素的原位置
    element = driver.find_element_by_name("xxx")
    #定位元素要移动到的目标位置
    target = driver.find_element_by_name("xxx")
    #执行元素的移动操作
    ActionChains(driver).drag_and_drop(element, target).perform()
    5、#鼠标左键
    left=driver.find_element_by_xpath("xxx")
    ActionChains(driver).click_and_hold(left).perform()
    复制代码

    4、一组元素的定位

    1 #一组元素的定位
    2 driver.find_element_by_link_text("复选框").click()
    3 inputs = driver.find_elements_by_tag_name("input")
    4 for input in inputs:
    5     if  input.get_attribute("type") =="checkbox":      #避免定位的不唯一性
    6         input.click()

    5、弹窗

    alert弹窗
    1 driver.find_element_by_id("alert").click()  #定位并点击
    2 time.sleep(5)
    3 alert  = driver.switch_to_alert()           #切换到弹窗上
    4 print(alert.text)                           #打印弹窗信息
    5 alert.accept()                              #确定
    6 #alert.dismiss()                            #取消
    comfrim确认框
    复制代码
    1 driver.find_element_by_id("confirm").click() #定位并点击
    2 3 comfirm = driver.switch_to_alert()           #切换到弹窗上
    4 print(comfirm.text)                          #打印弹窗信息
    5 comfirm.accept()                             #确认
    6 # comfirm.dismiss()                          #取消
    7 
    8 # driver.switch_to_alert().accept()    #直接点击确定
    复制代码
    prompt弹窗
    1 driver.find_element_by_id("prompt").click()  #定位并点击弹出弹窗
    2 prompt = driver.switch_to_alert()            #切换并定位到弹窗
    3 print(prompt.text)                           #打印弹窗上的信息
    4 prompt.send_keys("我爱你你可知道")             #输入内容
    5 prompt.accept()                              #确认
    6 # prompt.dismiss()                           #取消

    6、多窗口处理

    复制代码
     1 curr_handle = driver.current_window_handle     #获得当前句柄
     2 print("curr_handle=",curr_handle)              #打印当前句柄
     3 time.sleep(3)
     4 driver.find_element_by_link_text("python自动化测试").click()
     5 all_handle = driver.window_handles             #获取所有的句柄
     6 for i in all_handle:
     7     if i != curr_handle:                       #如果不等于之前定义的句柄
     8         driver.switch_to_window(i)             #切换到另一个句柄
     9         time.sleep(2)
    10         curr_handle1 = driver.current_window_handle
    11         print("curr_handle1=",curr_handle1)
    12         print(driver.title)                    #打印title
    13         driver.quit()
    复制代码

    7、JS

    复制代码
     1 #先定义两个滑动页面的方法并定义js语句,执行直接调用即可
     2 def scroll_top():
     3     if driver.name == "chrome":
     4         js = "var q=document.body.scrollTop=0"
     5     else:
     6         js = "var q=document.documentElement.scrollTop=0"
     7     return driver.execute_script(js)
     8 
     9 def scroll_foot():
    10     if driver.name == "chrome":
    11         js = "var q=document.body.scrollTop=10000"
    12     else:
    13         js = "var q=document.documentElement.scrollTop=10000"
    14     return driver.execute_script(js)
    15 
    16 scroll_foot()   #调用滑到页底
    复制代码
    1 #更改属性,隐藏形式改为文本形式
    2 driver.execute_script("document.getElementById('em').type='text';")
    3 #执行一个弹窗
    4 driver.execute_script("alert('显示出来啦!')")

    8、frame

    复制代码
     1 第一种方式是switch_to_frame
     2 driver.find_element_by_link_text("frame1").click()
     3 driver.switch_to_frame("frame2")         #通过id定位
     4 # driver.switch_to_frame("myframe")      #通过name定位
     5 driver.find_element_by_link_text("我就是我不一样的烟火").click() #我为自己代言为frame1的超文本链接
     6 
     7 第二种方式是switch_to.frame
     8 driver.switch_to.frame("iframe2")    #切到frame中
     9 driver.switch_to.parent_frame()     #从子frame切回到父frame
    10 driver.switch_to.default_content()  #从frame中切回主文档
    复制代码

    9、文件上传 

    1 #定位上传按钮,添加本地文件
    2 driver.find_element_by_name("file").send_keys('D:/selenium_use_case/upload_file.txt')

    10、文件下载

    复制代码
     1 import os
     2 from selenium import webdriver
     3 
     4 fp = webdriver.FirefoxProfile()
     5 fp.set_preference("browser.download.folderList",2)
     6 fp.set_preference("browser.download.manager.showWhenStarting",False)
     7 fp.set_preference("browser.download.dir", os.getcwd())
     8 fp.set_preference("browser.helperApps.neverAsk.saveToDisk",
     9 "application/octet-stream")
    10 
    11 browser = webdriver.Firefox(firefox_profile=fp)
    12 browser.get("http://pypi.python.org/pypi/selenium")
    13 browser.find_element_by_partial_link_text("selenium-2").click()
    14 
    15 注释:
    16 browser.download.dir 用于指定所下载文件的目录。
    17 os.getcwd() 该函数不需要传递参数,用于返回当前的目录。
    18 application/octet-stream 为内容的类型。
    复制代码
  • 相关阅读:
    crm 4 注释与上传附件权限
    动态图片轮播
    PHP 连接 MSSQL
    php mssql 中文各种乱码
    百度地图逆地址解析
    Microsoft Visual C++ 2015 Redistributable(x64)
    服务器 vps 空间
    Python之路【第二篇】:Python基础(二)
    Python之路【第一篇】:Python简介和入门
    2016年会成为Java EE微服务年吗?
  • 原文地址:https://www.cnblogs.com/nadian/p/11155949.html
Copyright © 2011-2022 走看看