python自动化测试Selenium 常用函数

Seleninum作为自动化测试的工具,自然是提供了很多自动化操作的函数,
1)下面列举下个人觉得比较常用的函数,更多可见官方文档:
官方API文档:http://seleniumhq.github.io/selenium/docs/api/py/api.html

1) 定位元素
find_element_by_class_name:根据class定位
find_element_by_css_selector:根据css定位
find_element_by_id:根据id定位
find_element_by_link_text:根据链接的文本来定位
find_element_by_name:根据节点名定位
find_element_by_partial_link_text:根据链接的文本来定位,只要包含在整个文本中即可
find_element_by_tag_name:通过tag定位
find_element_by_xpath:使用Xpath进行定位
PS:把element改为elements会定位所有符合条件的元素,返回一个List
比如:find_elements_by_class_name

2) 鼠标动作

有时需要在页面上模拟鼠标操作,比如:单击,双击,右键,按住,拖拽等
可以导入ActionChains类:selenium.webdriver.common.action_chains.ActionChains
使用ActionChains(driver).XXX调用对应节点的行为

click(element):单击某个节点;
click_and_hold(element):单击某个节点并按住不放;
context_click(element):右键单击某个节点;
double_click(element):双击某个节点;
drag_and_drop(source,target):按住某个节点拖拽到另一个节点;
drag_and_drop_by_offset(source, xoffset, yoffset):按住节点按偏移拖拽
key_down:按下特殊键,只能用(Control, Alt and Shift),比如Ctrl+C
ActionChains(driver).key_down(Keys.CONTROL).send_keys(‘c’).key_up(Keys.CONTROL).perform();
key_up:释放特殊键;
move_by_offset(xoffset, yoffset):按偏移移动鼠标;
move_to_element(element):鼠标移动到某个节点的位置;
move_to_element_with_offset(element, xoffset, yoffset):鼠标移到某个节点并偏移;
pause(second):暂停所有的输入多少秒;
perform():执行操作,可以设置多个操作,调用perform()才会执行;
release():释放鼠标按钮
reset_actions:重置操作
send_keys(keys_to_send):模拟按键,比如输入框节点.send_keys(Keys.CONTROL,’a’)
全选输入框内容,输入框节点.send_keys(Keys.CONTROL,’x’)剪切,模拟回退:
节点.send_keys(keys.RETURN);或者直接设置输入框内容:输入框节点.send_keys(‘xxx’);
send_keys_to_element(element, *keys_to_send):和send_keys类似;

3) 弹窗

对应类:selenium.webdriver.common.alert.Alert,感觉应该用得不多…

如果你触发了某个时间,弹出了对话框,可以调用下述方法获得对话框:
alert = driver.switch_to_alert(),然后可以调用下述方法:

accept():确定
dismiss():关闭对话框
send_keys():传入值
text():获得对话框文本

4)页面前进,后退,切换

切换窗口: driver.switch_to.window(“窗口名”)
或者通过window_handles来遍历
for handle in driver.window_handles:
      driver.switch_to_window(handle)
driver.forward() #前进
driver.back() # 后退

5) 页面截图

driver.save_screenshot(“截图.png”)

6) 页面等待
现在的网页越来越多采用了 Ajax技术,这样程序便不能确定何时某个元素完全
加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的
代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。

为了避免这种元素定位困难而且会提高产生 ElementNotVisibleException的概率。
所以 Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。

显式等待:

显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有
找到元素,那么便会抛出异常了。

from selenium import webdriver
from selenium.webdriver.common.by import By
# WebDriverWait 库,负责循环等待
from selenium.webdriver.support.ui import WebDriverWait
# expected_conditions 类,负责条件出发
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.PhantomJS()
driver.get("http://www.xxxxx.com/loading")
try:
    # 每隔10秒查找页面元素 id="myDynamicElement",直到出现则返回
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

如果不写参数,程序默认会 0.5s 调用一次来查看元素是否已经生成,
如果本来元素就是存在的,那么会立即返回。

下面是一些内置的等待条件,你可以直接调用这些条件,而不用自己
写某些等待条件了。

title_is
title_contains
presence_of_element_located
visibility_of_element_located
visibility_of
presence_of_all_elements_located
text_to_be_present_in_element
text_to_be_present_in_element_value
frame_to_be_available_and_switch_to_it
invisibility_of_element_located
element_to_be_clickable – it is Displayed and Enabled.
staleness_of
element_to_be_selected
element_located_to_be_selected
element_selection_state_to_be
element_located_selection_state_to_be
alert_is_present

隐式等待:

隐式等待比较简单,就是简单地设置一个等待时间,单位为秒。

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.implicitly_wait(10) # seconds
driver.get("http://www.xxxxx.com/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

当然如果不设置,默认等待时间为0。

7.执行JS语句

driver.execute_script(js语句)
##比如滚动到底部:
js = document.body.scrollTop=10000
driver.execute_script(js)

小结
本节讲解了一波使用Selenium自动化测试框架来抓取JavaScript动态生成数据,
Selenium需依赖于第三方的浏览器。
————————————————
 

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值