Selenium常⽤函数总结
Seleninum作为⾃动化测试的⼯具,⾃然是提供了很多⾃动化操作的函数,下⾯列举下个⼈觉得⽐较常⽤的函数,更多可见官⽅⽂档: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.webdrivermon.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.webdrivermon.alert.Alert
如果你触发了某个时间,弹出了对话框,可以调⽤下述⽅法获得对话框:
alert = driver.switch_to_alert(),然后可以调⽤下述⽅法:
accept():确定
dismiss():关闭对话框
send_keys():传⼊值
text():获得对话框⽂本
4.页⾯前进,后退,切换
driver.switch_to_window(driver.window_handles[1])#切换窗⼝
driver.forward() #前进
driver.back() # 后退
#打印当前url
print(driver.current_url)
5.页⾯截图
driver.save_screenshot(“截图.png”)
6.设置代理
# 设置代理
from selenium import webdriver
options.add_argument("--proxy-server=101.37.118.54:8888")
driver_path = r'D:/'
driver = webdriver.Chrome(executable_path=driver_path,options=options)
<("/ip")
7.页⾯等待
现在的⽹页越来越多采⽤了Ajax技术,这样程序便不能确定何时某个元素完全
加载出来了。如果实际页⾯等待时间过长导致某个dom元素还没出来,但是你的
代码直接使⽤了这个WebElement,那么就会抛出NullPointer的异常。
为了避免这种元素定位困难⽽且会提⾼产⽣ElementNotVisibleException的概率。
所以Selenium 提供了两种等待⽅式,⼀种是隐式等待,⼀种是显式等待。
显式等待:显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有
到元素,那么便会抛出异常了。
from selenium import webdriverselenium怎么使用
from selenium.webdrivermon.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()
<("/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
<("/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
当然如果不设置,默认等待时间为0。
8.执⾏JS语句
#⽐如滚动到底部:
js = document.body.scrollTop=10000
9.补充
# 到“嵌套”的iframe
iframe = driver.find_element_by_xpath('//iframe') # 切换到iframe
driver.switch_to.frame(iframe) # 切换到iframe
获取元素标签的内容(⽂本信息):
get_attribute(‘textContent’)
获取元素内的全部HTML:
get_attribute('innerHTML')
获取包含选中元素的HTML:
get_attribute('outerHTML')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论