1.1.1      浏览器窗口大小set_windows_size()

# coding=utf-8

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("http://news.baidu.com/")

driver.set_window_size(480,800)  #设置浏览器大小为移动端样式

driver.maximize_window()  #设置浏览器全屏显示

1.1.2      浏览器前进、后退

driver.back()

driver.forward()

1.1.3      浏览器刷新

driver.refresh()

1.2     简单元素操作

clear()             #清空

send_keys(“value”)   #输入值

click()              #点击 (按钮、图片、复选框、单选框、下拉框等)

1.2.1      WebElement接口常用方法

submit()                 #提交表单

元素.size                #返回元素尺寸

元素.text                #获取元素文本

元素.get_attribute(name)  #获取name属性值 如:.get_attribute(‘type’)

元素.is_displayed         #返回该元素是否用户可见(可见:True)

1.3     鼠标事件

鼠标操作的方法封装在ActionChains类。

引入ActionChains:

from selenium.webdriver.common.action_chains import ActionChains

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

context_click()  右击

double_click()  双击

move_to_element()  鼠标悬停

drag_and_drop()  拖动

例如:

元素a = driver.find_element_by_id(‘xx’)

元素b = driver.find_element_by_id(‘ww’)

1.3.1      右击a

ActionChains(driver).context_click(a).perform()

1.3.2      双击a

ActionChains(driver). double_click(a).perform()

1.3.3      悬停a

ActionChains(driver). move_to_element(a).perform()

1.3.4      拖动a至b

ActionChains(driver). drag_and_drop(a,b).perform()

1.4     键盘事件

#引入键盘事件

from selenium.webdriver.common.keys import keys

常见操作:

Send_keys(keys.BACK_SPACE)                删除键

send_keys(Keys.SPACE)                             空格键

send_keys(Keys.TAB)                                制表键

send_keys(Keys.ESPACE)                           回退键

send_keys(Keys.ENTER)                            回车键

send_keys(Keys.CONTROL,'a')                     全选

send_keys(Keys.CONTROL,'c')                     复制

send_keys(Keys.CONTROL,'x')                     剪切

send_keys(Keys.CONTROL,'v')                     粘贴

send_keys(Keys.F1)                                 F1

1.5     获得验证信息

获得title、url、或text进行验证。

  • driver.title
  • driver.current_url
  • 元素.text

以上示例:

# 003:浏览器大小、拖动滚动条、全屏、获取浏览器titile、url、
# coding=utf-8
from selenium import webdriver
from time import *

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
driver.maximize_window()         #设置浏览器全屏显示
sleep(1)
driver.find_element_by_id("kw").send_keys("selenium2")
driver.find_element_by_id("su").click()
driver.set_window_size(480,800)  #设置浏览器大小为移动端样式
sleep(1)
# 通过javascript设置浏览器窗口的滚动条 注:window.scrollTo(水平滚动条的距离,垂直滚动条的距离)
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(1)
print(driver.title)
print(driver.current_url)
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("pycharm")
driver.find_element_by_id("su").submit()
sleep(1)
driver.back()                   #浏览器后退
sleep(1)
driver.forward()                #浏览器后退
sleep(1)
driver.quit() 

 

1.6     设置元素等待

1.6.1      显示等待

webdriver等待某个条件成立时继续执行,否则在达到最大时长的时候抛出TimeoutException。

# 引入元素等待方法

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait类由webdriver提供的等待方法,在设置的时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超出设置的时间为检测出元素,则抛出异常。语法如下:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

  • driver:浏览器驱动
  • timeout:超时时间,单位为秒
  • poll_frequency:检测的间隔时间,默认为0.5s
  • ignored_exceptions:超时后抛得异常,默认情况下抛NoSuchElementException.

 

WebDriverWait()一般由until()或until_not()配合使用。

  • until(method,massage’’):调用该方法提供的驱动程序作为一个参数,直至返回值为True
  • until_not(method,massage’’):调用该方法提供的驱动程序作为一个参数,直至返回值为False
# 004:WebDriverWait使用
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com/")
e = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, 'kw')))
e.send_keys('JLL')

 

1.6.1.1       expected_conditions

expected_conditions类提供的预期条件判断的方法

title_is 判断当前页面的标题是否等于预期

title_contains 判断当前页面标题是否包含预期字符串

presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见

visbility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)

visbility_of  与上一个方法作用相同,只是接收参数不同。上一个接收参数是定位,这一个参数是定位后的元素

presence_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。只要有1个就返回True

text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串

text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串

frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回True并且switch进去,否则返回False

invisbility_of_element_located 判断某个元素是否不存在于DOM树或不可见

element_to_be_clickable() 判断某个元素是否可见并且是可以点击的

staleness_of 等到一个元素从DOM树中移除,判断一个元素是否仍在DOM,可判断页面是否已经刷新

element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表

element_selection_state_to_be 判断某个元素的选中状态是否符合预期,传入元素对象以及状态,相等返回True,否则返回False

element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数是定位后的元素,该方法接收的参数是定位

alert_is_present 判断页面上是否存在alert

例如:

Ele = WebDriverWait(driver, 5,0.5).until(EC. presence_of_element_located(By.ID,’wk’))

1.6.1.2       is_displayed

# is_displayed:and try:……except
# coding=utf-8
from selenium import webdriver
from time import sleep, ctime

driver = webdriver.Chrome()
driver.get("http://news.baidu.com/")

for i in range(10):
    try:
        el = driver.find_element_by_id('s_btn_wr2')
        if el.is_displayed():
            break
    except: pass
    sleep(1)
else:
    print('time out')
driver.close()

 

 

1.6.2      隐式等待

通过设定的时长等待页面元素加载完成。如果超过设定时间还未加载完成,抛出NoSuchElementException。webdriver提供了implicitly_wait()方法来实现隐式等待,默认设置为0.

# 006:隐式等待 and NoSuchElementException
# coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime

driver = webdriver.Chrome()
driver.implicitly_wait(5)       #设置隐式等待5秒
driver.get("http://news.baidu.com/")

try:
    print(ctime())
    driver.find_element_by_id("ww2").send_keys("selenium2")
except NoSuchElementException as e:
    print(e)
finally:
    print(ctime())
driver.quit()

 

 

1.6.3      sleep休眠

# 引入sleep()方法

from time import sleep

sleep(2)   固定休眠2秒

posted on 2018-05-05 07:34  jxba  阅读(199)  评论(0编辑  收藏  举报