当前位置 : 主页 > 网络安全 > 测试自动化 >

selenium元素聚焦

来源:互联网 收集:自由互联 发布时间:2021-06-19
selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了。 当我们页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接操作的,会报元素不可见异

  selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了。

  当我们页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接操作的,会报元素不可见异常的。这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,这时候只能借助Js了,还好selenium提供了一个操作js的方法:execute_script(),可以直接执行js的脚本。

  一、控制滚动条高度

  1.滚动条回到顶部:

    js="var q=document.getElementById(‘id‘).scrollTop=0"
    driver.execute_script(js)
  2.滚动条拉到底部

    js="var q=document.documentElement.scrollTop=10000"
    driver.execute_script(js)

    可以修改scrollTop 的值,来定位右侧滚动条的位置,0是最上面,10000是最底部。

    以上方法在Firefox和IE浏览器上上是可以的,但是用Chrome浏览器,发现不管用。Chrome浏览器解决办法:

    js = "var q=document.body.scrollTop=0"
    driver.execute_script(js)

 

  二、横向滚动条
    1.有时候浏览器页面需要左右滚动(一般屏幕最大化后,左右滚动的情况已经很少见了)。
    2.通过左边控制横向和纵向滚动条scrollTo(x, y)js = "window.scrollTo(100,400);"

    driver.execute_script(js)

  三、元素聚焦

    虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。

    同样需要借助JS去实现。 具体如下:

    代码:

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # @创建时间: 2018/11/26 9:43
    # @创建人 : Kevin
    # @IDE : PyCharm
    from selenium import webdriver
    from time import sleep

    driver = webdriver.Chrome()
    driver.get(‘https://www.cnblogs.com/kevin-liutianping/p/9967792.html‘)
    a= driver.find_element_by_xpath(‘//div[@id="author_profile_detail"]/a[1]‘) # 定位元素
    driver.execute_script("arguments[0].scrollIntoView();",a) # 执行js,通过a元素进行元素聚焦,使滚动条下滑至该元素位置
    sleep(5)                                  # 查看滚动条是否下滑

    element.click() # 点击操作
    driver.quit()    看到没,这样我们就不用管元素在屏幕上的具体哪个位置啦!
网友评论