zoukankan      html  css  js  c++  java
  • Selenium常用API用法示例集--下拉框、弹窗、JS、文件上传和下载等

    元素识别方法、一组元素定位、鼠标操作、多窗口处理、下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

    元素识别方法:

    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 driver.find_element_by_link_text("复选框").click()
    2 inputs = driver.find_elements_by_tag_name("input")
    3 for input in inputs:
    4     if  input.get_attribute("type") =="checkbox":      #避免定位的不唯一性
    5         input.click()

    鼠标操作:

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

    多窗口处理:

     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()

    下拉框:

     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/jia_myself/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    另一种下拉框的编写形式:
    21 driver.find_element_by_xpath("//*[@id='status']/option[3]").click() #初审通过
    22 driver.find_element_by_xpath("//option[@value='1']").click()        #初审通过

    文本域及富文本框:

    一般用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)

    弹窗:

    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()                            #取消

    confirm弹窗

    1 driver.find_element_by_id("confirm").click() #定位并点击
    2 comfirm = driver.switch_to_alert()           #切换到弹窗上
    3 print(comfirm.text)                          #打印弹窗信息
    4 comfirm.accept()                             #确认
    5 # comfirm.dismiss()                          #取消
    6 
    7 # 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()                           #取消

    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('显示出来啦!')")

    frame:

    1 driver.find_element_by_link_text("frame2").click()
    2 driver.switch_to_frame("frame1")         #通过id定位
    3 # driver.switch_to_frame("myframe")   #通过name定位
    4 driver.find_element_by_link_text("我为自己代言").click() #我为自己代言为frame1的超文本链接

    文件上传:

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

    文件下载:

     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 为内容的类型。
  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/ailiailan/p/8024231.html
Copyright © 2011-2022 走看看