一、简单对象定位属性:
- · 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("测试") # 通过选项文字进行选择