unittest详解(三) 简单元素定位

一、简单对象定位属性:

  • · id
  • · name
  • · tag name
  • · class name
  • · link text
  • · partial link text
  • · xpath
  • · css selector

link text :有时候不是一个输入框也不是一个按钮,而是一个文字链接,我们可以通过link

    browser.find_element_by_link_text("贴 吧").click()

partial link text:通过部分链接定位

    browser.find_element_by_partial_link_text("贴").click() 

css selector

#可以取name属性
    <a href="http://news.baidu.com" name="tj_news">新 闻</a>

  driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()

#可以取title属性

  <a onclick="queryTab(this);" mon="col=502&pn=0" title="web" href="http://www.baidu.com/">网页</a>

  driver.find_element_by_css_selector("a[title=\"web\"]").click()

#也可以是取class name属性

  <a class="RecycleBin xz" href="javascript:void(0);"> 

   driver.find_element_by_css_selector("a.RecycleBin").click()

 定位方法:

  webdriver可以很方便的使用findElement方法来定位某个特定的对象,如果需要定位一组对象,这时候就需要使用findElements方法。

层级定位:

# coding=utf-8
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import time
import os
dr = webdriver.Chrome()
file_path =  'file://' + os.path.abspath('test.html')
dr.get(file_path)
#点击Link1链接(弹出下拉列表)
dr.find_element_by_link_text('Link1').click()
#找到id 为dropdown1的父元素
WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed())
#在父亲元件下找到link为Action的子元素
menu = dr.find_element_by_id('dropdown1').find_element_by_link_text('Action')
#鼠标定位到子元素上
webdriver.ActionChains(dr).move_to_element(menu).perform()
time.sleep(2)
dr.quit()

 定位思路:

  具体思路是:先点击显示出1个下拉菜单,然后再定位到该下拉菜单所在的ul,再定位这个ul下的某个具体的link。在这里,我们定位第1个下拉菜单中的Action这个选项。

     WebDriverWait(dr, 10)    10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。

  is_displayed() 该元素是否用户可以见

    ActionChains(driver)   生成用户的行为。所有的行动都存储在actionchains对象。通过perform()存储的行为。

  move_to_element(menu)  移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素。

  to_element:元件移动到。

    perform()  执行所有存储的行为

   “下拉列表中Action选项处于被选中状态”,通过鼠标移动到选项上就达到到了这种效果,但通过程序模拟确实比较麻烦

 

基础操作:

self.driver.implicitly_wait(30)
driver.maximize_window()     #窗口最大化
#driver.set_window_size(1366, 768)    #参数数字为像素点
driver.switch_to_window(driver.window_handles[1])       #此行代码用来定位当前页面
title=driver.title   # 获取页面title 
url = driver.current_url   #获取当前页面url.
browser.back()
browser.forward()

智能等待:

  implicitly_wait() 它的用法应该比time.sleep() 更智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

 

二、简单元素操作:

  • · click() 点击对象
  • · send_keys('xxxx') 在对象上模拟按键输入
  • · clear()  清除对象的内容,如果可以的话

 

三、WebElement  接口操作:

  • · text  获取该元素的文本
  • · submit()  提交表单
  • · get_attribute('xxxx')  获得属性值
  •  s_selected(self) #元素是否被选择
  •  is_enabled() #元素是否被启用
  •  find_element_by_id("kw").is_displayed() #获取元素是否可见,值为True或False
  • .size #获取元素的大小

  多层框架或窗口的定位:

  • switch_to_frame()

  #先找到到ifrome1(id = f1) browser.switch_to_frame("f1") #再找到其下面的ifrome2(id =f2) browser.switch_to_frame("f2")

  • switch_to_window("windowName")

 

四、鼠标操作:双击,鼠标右键,鼠标移动,拖动到元素上等操作:

  ActionChains(driver):存储鼠标的操作

  perform():对指定的鼠标操作的执行

右击图标:

  from selenium.webdriver.common.action_chains import ActionChains

  imei=driver.find_element_by_css_selector(" ").click()

  ActionChains(driver).context_click(imei).perform() #鼠标右键

  ActionChains(driver).click_and_hold("imei").perform()             #鼠标左键

  ActionChains(driver).double_clcik("imei").perform()             #鼠标双击

  ActionChains(driver).move_to_element("imei").perform()            #鼠标移动到某个元素上

  ActionChains(driver).drag_and_drop(start,end).perform()           #鼠标拖动某个元素从start位置到end的位置

五、键盘操作:

键盘的操作基于send_keys()方法

  from selenium.webdriver.common.Keys import Keys

  driver.find_element_by_id("kw").send_keys(KEY.BACK_SPACE) #删除键 driver.find_element_by_id("kw").send_keys(KEY.ENTER) #回车键   

  driver.find_element_by_id("kw").send_keys(KEY.SPACE) #空格键 driver.find_element_by_id("kw").send_keys(KEY.TAB) #制表符

  driver.find_element_by_id("kw").send_keys(KEY.ESCAPE) #退出键 driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'a') #全选

  driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'c') #复制 driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'v') #粘贴

  driver.find_element_by_id("kw").send_keys(KEY.CONTROL,'x') 剪切

六、下拉框multiple select:

  from selenium.webdriver.support.ui import Select

  # 首先找到需要选择的multiple select元素,实例化一个Select类

  select = Select(self.driver.find_element_by_xpath('//*[@id="Root_sourcetype"]'))

  select.deselect_all() # multiple select元素全部取消选择

  select.select_by_index(0) # 选择multiple select元素中第一个选项

  select.select_by_value("test") #选择下拉框value为test的选项

  select.select_by_visible_text("测试") # 通过选项文字进行选择

 

 

猜你喜欢

转载自www.cnblogs.com/xiatian09/p/9779500.html