元素识别方法、一组元素定位、鼠标操作、多窗口处理、下拉框、文本域及富文本框、弹窗、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 13 14 15 16 17 18 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 为内容的类型。