selenium笔记

参考:https://blog.csdn.net/u013250071/article/details/79133116

selenium三种等待方式

  • time.sleep(x):强制等待

第一种也是使用最简单的一种办法就是强制等待sleep(X),强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。

缺点:不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间),如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。

优点:使用简单,可以在调试时使用。

  • implicitly_wait(X):隐式等待

第二种方法是隐形等待,其设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步操作。

缺点:使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;

但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。

优点:隐性等待对整个driver的周期都起作用,所以只要设置一次即可。

  • WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)

WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

20:最长等待时间。

0.5:检查间隔时间,每隔0.5秒检查一次操作是否完成。

EC.presence_of_element_located(locator):判断目标元素是否已经成功加载。
presence_of_element_located: 当我们不关心元素是否可见,只关心元素是否存在在页面中。
visibility_of_element_located: 当我们需要找到元素,并且该元素也可见。

image.png

有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了。

  • driver.current_window_handle

获取当前页面的句柄

  • window_handles

获取当前所以的句柄

前言

在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼

切换frame(iframe)

frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作

  • switch_to.frame()
    切换至frame
from selenium import webdriver
driver = webdriver.Firefox()
driver.switch_to.frame(0)  # 1.用frame的index来定位,第一个是0
# driver.switch_to.frame("frame1")  # 2.用id来定位
# driver.switch_to.frame("myframe")  # 3.用name来定位
# driver.switch_to.frame(driver.find_element_by_tag_name("iframe"))  # 4.用WebElement对象来定位
  • switch_to.default_content()
    从frame中切回主文档
driver.switch_to.default_content()
  • switch_to.parent_frame()
    嵌套frame的操作
<html>
    <iframe id="frame1">
        <iframe id="frame2" / >
    </iframe>
</html>
driver.switch_to.frame("frame1")
driver.switch_to.frame("frame2")

frame切回到父frame

driver.switch_to.parent_frame()  # 如果当前已是主文档,则无效果

前言

页面经常回切换窗口或者alert所以特此记录一些方法

switch_to包的方法详解
  • driver.switch_to.active_element()

等同于driver.switch_to_active_element()

解释:定位到当前聚焦的元素上

  • driver.switch_to.alert()

等同于 driver.switch_to_alert()

解释:切换到alert弹窗

  • driver.switch_to.default_content()

等同于driver.switch_to_default_content()

解释:切换到最上层页面

  • driver.switch_to.frame(frame_reference)

等同于 driver.switch_to_frame(frame_reference)

解释:通过id、name、element(定位的某个元素)、索引来切换到某个frame

  • driver.switch_to.parent_frame()

解释:这是switch_to中独有的方法,可以切换到上一层的frame,对于层层嵌套的frame很有用

  • driver.switch_to.window(window_name)

等同于 driver.switch_to_window(window_name)

解释:切换到制定的window_name页面

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容