python selenium - 基础常用方法和知识

一、selenium基本方法

① 元素操作

driver.maximize_window()   # 最大化窗口
driver.set_window_size(500, 500)  # 设置窗口大小
driver.set_window_position(1000,0)   # 设置窗口位置
driver.forward()   # 前进
driver.back()    # 后退
driver.refresh()  # 刷新
driver.current_url  # 获取网页当前url
driver.title   # 获取网页标题

② 获取元素信息的常用方法

driver.find_element_by_xx("xx").size   # 返回元素大小
driver.find_element_by_xx("xx").text   # 返回元素的文本
driver.find_element_by_xx("xx").get_attribute("xxx")  # 获取属性值,传递的参数为元素的属性名
    1> 当前选中标签的属性名     # 获取该属性名的值
    2> textContent:获取标签之间的文本内容
    3> innerHTML:获取标签之间的完整HTML(不包含当前选中标签)
    4> outerHTML:获取当前标签的完整HTML(包含当前选中标签)
    5> value: 获取input输入框的元素的输入文本
driver.find_element_by_xx("xx").is_enabled()   # 判断元素是否可用
driver.find_element_by_xx("xx").is_displayed()  # 判断元素是否可见
driver.find_element_by_xx("xx").is_selected()    # 判读元素是否选中,用来检查复选框或单选按钮是否被选中

③ 获取元素文本

  1> 通过WebElement对象的text属性,可以获取元素展示在界面上的文本内容

driver.find_element_by_xx("xx").text   # 返回元素的文本

  2> 但是,当元素的文本内容没有展示在界面上,或者没有完全展示在界面上,这时用WebElement对象的text属性可能无法获取到文本内容。可尝试使用如下方法:

driver.find_element_by_xx("xx").get_attribute("innerText")
或者
driver.find_element_by_xx("xx").get_attribute("textContent")

  innerText和textContent属性的区别:

    ① textContent会获取style="display:none"中的文本,而innerText不会

    ② textContent会获取style标签里面的文本,而innerText不会

    ③ textContent不会理会html格式,直接输出不换行的文本,innerText会根据标签里面的元素独立一行

    ④ innerText对IE兼容性较好,textContent虽然作为标准方法但是只支持IE8+以上浏览器

  例如:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://cdn1.python3.vip/files/selenium/sample1.html")
print(driver.find_element_by_xpath('//div[@id="container"]').get_attribute('innerText'))
print(driver.find_element_by_xpath('//div[@id="container"]').get_attribute('textContent'))
driver.quit()

  3> 对于input输入框的元素,要获取里面的输入文本,用text属性的不行的,可以使用如下方法:

driver.find_element_by_xx("xx").get_attribute("value")

 二、鼠标操作

方法 作用
double_click() 双击
context_click() 右击
move_to_element() 悬停
drag_and_drop() 拖拽
perform() 执行

示例:

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
action = ActionChains(driver=driver)
action.move_to_element(driver.find_element_by_id("s-usersetting-top")).perform()   # 定位首页“设置”元素,鼠标悬停

三、键盘操作

方法 作用
Keys.ENTER 回车
Keys.SPACE 空格键
Keys.TAB TAB键
Keys.BACK_SAPCE 删除键
Keys.CONTROL,'a' 全选

示例:

from selenium.webdriver.common.keys import Keys
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('python学习', Keys.ENTER)

四、截屏

get_screenshot_as_file()

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
driver.find_element_by_id('kw').send_keys('python学习', Keys.ENTER)
sleep(4)
driver.get_screenshot_as_file('./test.png')  # 也可以保存为jpg格式,虽然会报错但图片还是会保存

五、窗口切换

switch_to_window()

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.maximize_window()
current_handle = driver.current_window_handle  # 当前窗口句柄
sleep(2)
driver.find_element_by_xpath("//*[@id='hotsearch-content-wrapper']/li[1]/a/span[2]").click()  # 点击百度热搜第一个
handles = driver.window_handles  # 获取所有窗口句柄
sleep(2)
for handle in handles:
    if handle == current_handle:
        driver.switch_to_window(handle)  # 切换窗口
driver.find_element_by_id('kw').send_keys('python学习', Keys.ENTER)

六、滚动条

我们在进行UI自动化测试时,免不了要滑动鼠标,因为有些元素并不在首屏,需要滑动鼠标才可见。

selenium进行自动化过程中,可通过execute_script执行js语句实现页面滑动。常见的滑动场景分为四种:滑动至页面底部、滑动至顶部、滑动至具体位置、滑动至目标元素可见。

 滑动到页面底部:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")

滑动到页面顶部:

driver.execute_script("window.scrollTo(0, -document.body.scrollHeight)")

滑动到具体位置:

复制代码
driver.execute_script("window.scrollTo(x,y)")   # 滚动到具体位置
driver.execute_script("window.scrollBy(x,y)")  # 滚动到具体位置

driver.execute_script("window.scrollBy(0,500)")  # 向下滑动500个像素

driver.execute_script("window.scrollBy(0,-500)")  # 向上滚动500个像素

driver.execute_script("window.scrollBy(500,0)")  # 向右滑动500个像素

driver.execute_script("window.scrollBy(-500,0)")  # 向左滚动500个像素

或者

复制代码
# 滚动条左右滚动————向右
js0 = 'var q=document.documentElement.scrollLeft=100'
driver.execute_script(js0)

# 滚动条左右滚动————向左
js1 = 'var q=document.documentElement.scrollLeft=0'
driver.execute_script(js1)

# 滚动条上下滚动————向下
js2 = 'var q=document.documentElement.scrollTop=1000'
driver.execute_script(js2)

# 滚动条上下滚动————向上
js3 = 'var q=document.documentElement.scrollTop=0'
driver.execute_script(js3)

案例一:打开博客首页,将滚动条拖动到最底部,然后再拖动到最顶部

复制代码
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.csdn.net")
time.sleep(3)
# 将滚动条向下拖动到某个位置
js = 'var action=document.documentElement.scrollTop=50000000'
driver.execute_script(js)
time.sleep(3)
# 将滚动条拖动到最顶部
js0 = 'var action=document.documentElement.scrollTop=0'
driver.execute_script(js0)
time.sleep(3)
driver.quit()
复制代码

案例二:模拟鼠标滚动到需要显示的元素位置,使用场景:浏览器窗口小,页面过大内容显示不全,元素可以定位但不可见

复制代码
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("http://www.csdn.net")
time.sleep(3)
target = driver.find_element_by_xpath("//a[text()='关于我们']")
driver.execute_script("arguments[0].scrollIntoView();", target)  # 第一种方式
# driver.execute_script("arguments[0].focus();", target)   # 第二种方式
time.sleep(3)
driver.quit()

 

 

________________________________________________

参考博客:

https://blog.csdn.net/weixin_45541074/article/details/109442816

http://www.manongjc.com/detail/17-gtiggglmhdjppwu.html

 

posted @ 2022-04-29 16:21  *无边落木萧萧下*  阅读(135)  评论(0编辑  收藏  举报