Selenium 常用函数总结

2021年1月28日 285点热度 0人点赞 0条评论

图片


Seleninum作为自动化测试的工具,自然是提供了很多自动化操作的函数,下面列举下个人觉得比较常用的函数,更多可见官方文档:

官方API文档:http://seleniumhq.github.io/selenium/docs/api/py/api.html




01
定位元素

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

02
鼠标动作

有时需要在页面上模拟鼠标操作,比如:单击,双击,右键,按住,拖拽等。

可以导入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+CActionChains(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类似;

(左右滑动查看完整代码)

03
弹窗

对应类:selenium.webdriver.common.alert.Alert

如果你触发了某个时间,弹出了对话框,可以调用下述方法获得对话框:

alert = driver.switch_to_alert(),然后可以调用下述方法:

accept():确定

dismiss():关闭对话框

send_keys():传入值

text():获得对话框文本

04
页面前进,后退,切换

driver.switch_to_window(driver.window_handles[1])#切换窗口

driver.forward() #前进

driver.back() # 后退

#打印当前url

print(driver.current_url)

05
页面截图

driver.save_screenshot(“截图.png”)

06
置代理

# 设置代理from selenium import webdriveroptions.add_argument("--proxy-server=http://101.37.118.54:8888")driver_path = r'D:/chromedriver/chromedriver.exe'driver = webdriver.Chrome(executable_path=driver_path,options=options)driver.get("http://httpbin.org/ip")
(左右滑动查看完整代码)

07
页面等待

现在的网页越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全

加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的

代码直接使用了这个WebElement,那么就会抛出NullPointer的异常。

为了避免这种元素定位困难而且会提高产生ElementNotVisibleException的概率。

所以Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待。


显式等待:

显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有

找到元素,那么便会抛出异常了。

from selenium import webdriverfrom selenium.webdriver.common.by import By#WebDriverWait 库,负责循环等待from selenium.webdriver.support.ui import WebDriverWait#expected_conditions 类,负责条件出发from selenium.webdriver.support import expected_conditions as ECdriver = 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_istitle_containspresence_of_element_locatedvisibility_of_element_locatedvisibility_ofpresence_of_all_elements_locatedtext_to_be_present_in_elementtext_to_be_present_in_element_valueframe_to_be_available_and_switch_to_itinvisibility_of_element_locatedelement_to_be_clickable – it is Displayed and Enabled.staleness_ofelement_to_be_selectedelement_located_to_be_selectedelement_selection_state_to_beelement_located_selection_state_to_bealert_is_present
(左右滑动查看完整代码)

隐式等待:

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

from selenium import webdriverdriver = webdriver.PhantomJS()driver.implicitly_wait(10) # secondsdriver.get("http://www.xxxxx.com/loading")myDynamicElement = driver.find_element_by_id("myDynamicElement")
(左右滑动查看完整代码)

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

08
执行JS语句

driver.execute_script(js语句)

#比如滚动到底部:

js = document.body.scrollTop=10000

driver.execute_script(js)

09
补充

 # 找到“嵌套”的iframeiframe = driver.find_element_by_xpath('//iframe')     # 切换到iframedriver.switch_to.frame(iframe)     # 切换到iframe获取元素标签的内容(文本信息):get_attribute(‘textContent’)获取元素内的全部HTML:get_attribute('innerHTML')

获取包含选中元素的HTML:get_attribute('outerHTML')

(左右滑动查看完整代码)

图片

图片

链接:https://www.cnblogs.com/nmydt/p/14256307.html

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除

推荐阅读

点击阅读☞Python+Selenium,实现12306模拟登录

点击阅读☞Python+Selenium,实现贴吧自动发帖

点击阅读☞Selenium破解滑动验证码

点击阅读☞Selenium实战应用:如何把元素滚动到页面可见位置

点击阅读☞Selenium实战应用:实现页面元素任意拖拽

图片
“阅读原文”一起来充电吧!

图片

83600Selenium 常用函数总结

这个人很懒,什么都没留下

文章评论