一、八大定位方法
from selenium.webdriver.common.by import By
#id定位
webdriver.find_element(By.ID,value)
#class定位
webdriver.find_element(By.CLASS_NAME,value)
#xpath定位
webdriver.find_element(By.XPATH,value)
#css定位
webdriver.find_element(By.CSS_SELECTOR,value)
#name定位
webdriver.find_element(By.NAME,value)
#元素定位
webdriver.find_element(By.TAG_NAME,value)
#超链接文本定位
webdriver.find_element(By.LINK_TEXT,value)
#模糊文本定位
webdriver.find_element(By.PARTIAL_LINK_TEXT,value)
二、浏览器常用方法
以下以Chrome为例
from selenium import webdriver
browser = webdriver.Chrome() #获取chrome驱动对象
browser.get("https://www.baidu.com") #打开百度
browser.maximize_window() #窗口最大化
browser.set_window_size(weight,height) #设置窗口大小
browser.add_cookie(cookie_dict) #添加cookie
browser.delete_cookie(cookie_name) #删除cookie
browser.delete_all_cookies() #删除所有cookie
browser.back() #浏览器后退
browser.forward() #浏览器前进
browser.refresh() #浏览器刷新
browser.close() #关闭浏览器
browser.name #名称
browser.title #标题
browser.currenct_url #当前url
browser.find_element(way,value) #找到单个元素
browser.find_elements(way,value) #找到多个元素
browser.execute_script(js) #执行js脚本
三、鼠标操作
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
action = ActionChains(browser) #实例化鼠标对象
element = browser.find_element(By.ID,"kw")
action.click(element) #单击
element.click() #这也是单击
action.context_click() #右键点击
action.double_click() #双击
action.perform() #执行鼠标操作,记得执行这一步,不然以上的操作没有效果
element2 = browser.find_element(By.ID,"kw2") #此处定位id值为模拟
action.move_to_element(element) #鼠标悬浮element元素
action.click_and_hold(element) #长按element元素
action.drag_and_drop(element,element2) #将element拖动到element2处
action.drag_and_drop_by_offset(element,xoffset,yoffset) #将element拖动到(x,y)坐标
action.release() #释放鼠标
action.perform() 执行鼠标操作
四、键盘操作
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
input_bar = browser.find_element(By.ID,"kw") #输入框
input_bar.send_keys("输入文本")
input_bar.send_keys('file_path') #输入文件路径,上传文件
control = Keys.CONTROL # Ctrl键
back = Keys.BACK_SPACE # BackSpace键
input_bar.send_keys(back) #删除内容
input_bar.send_keys(control,'a') #相当于按下control+a
五、等待
1、强制等待
time.sleep()
2、显示等待
显示等待是指在指定时间内一直等待某个元素或者特定条件,若在指定时间内条件达成/元素出现,则结束等待,若超时则直接报错
等待条件:
title_is(title) 判断页面title是否符合预期
title_contains(title) 判断title是否包含某个字符串
presence_of_element_located(locator) 判断某个locator元素是否被加到DOM树里,并不代表该元素一定可见(元素可以是隐藏的)
visibility_of_element_located(locator) 判断某个locator元素是否可见。 可见代表非隐藏、可显示,并且元素的宽和高都大于0
visibility_of(element) 判断element元素是否可见
invisibility_of_element_located(locator) 判断某个locator元素是否隐藏DOM树(隐藏、不存在、可见)
text_to_be_present_in_element(locator,text) 判断某个locator元素的text是否包含了预期的字符串
text_to_be_present_in_element_value(locator,value) 判断某个元素的value属性值是否包含了预期的字符串
frame_to_be_available_and_switch_to_it() 判断该frame是否可以switch进去
element_to_be_clickable(locator) 判断某个locator元素是否可点击
staleness_of(element) 等某个元素从DOM树中移除。传入WebElement对象
element_to_be_selected(element) 等待element元素是被选中,一般用在下拉列表
element_located_to_be_selected(locator) 等待locator元素是被选中
element_selection_state_to_be(element, is_selected) 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be(locator,is_selected) 判断某个元素的选中状态是否符合预期
alert_is_present 判断页面是否存在alert
presence_of_all_elements_located(locator) 判断是否至少有1个元素存在DOM树中
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
browser = webdriver.Chrome()
waiter = WebDriverWait(browser, timeout=time) #实例化显示等待对象,并设置超时时间
condition = EC.title_is("百度") #设置条件
wait.until(condition) #显示等待直到条件达成
wait.until_not(condition) #显示等待直到条件不满足
3、隐式等待
隐式等待针对全局元素,可以理解为设定了一个查找元素的超时时间。在指定的时间内,没有找到元素会一直等待,直到超时报错
from selenium import webdriver
browser = webdriver.Chrome()
browser.implicitly_wait(time) #设置隐式等待时间
六、文本属性
1、元素文本 :element.text
2、元素是否选中 :element.is_selected()
3、元素标签名称 :element.tag_name
4、元素其他属性 :element.get_attribute(‘value’)
七、alert框操作
from selenium import webdriver
browser = webdriver.Chrome()
alert = browser.switch_to.alert() #实例化alert对象
alert.text #alert文本
alert.accept() #同意
alert.dismiss() #拒绝
alert.send_keys() #输入