08 Selenium的使用

2020年06月19日 73点热度 0人点赞 0条评论

上一篇,我们讲到Selenium是一个web的自动化测试工具,可以模拟人去浏览网页,那么我们来看看Selenium的使用方法。

1. 定位元素

下面,我们会讲到两种的方式来查找元素

如果使用By的方式获取元素,必须要先导入模块,导入的模块如下:

from selenium.webdriver.common.by import By
  • ind_element_by _id: 根据id来查找某个元素
submitTag = driver.find_element_by_id('su')
submitTg1 = driver.find_element(By.ID,'su')
  • find_element_by_class_name: 根据类名查找元素
submitTag = driver.find_element_by_class_name('su')
submitTag = driver.find_element(By.CLASS_NAME,'su')
  • find_element_by_name: 根据name属性的值来查找元素
submitTag = driver.find_element_by_name('email')
submitTag = driver.find_element(By.NAME,'email')
  • find_element_by_tag_name:根据标签名来查找元素
submitTag = driver.find_element_by_tag_name('div')
submitTag = driver.find_element(By.TAG_NAME,'div')
  • find_element_by_xpath: 根据xpath语法来获取元素
submitTag = driver.find_element_by_xpath('//div')
submitTag = driver.find_element(By.XPATH,'//div')
注意事项:

find_element 是获取第一个满足条件的元素

find_elements 是获取所有满足条件的元素

2. 操作表单元素

这里是指网页表单Form的元素操作,如登录窗口,记住我(CheckBox)等等。

第一步:找到这个元素

第二部:使用send_keys(value),将数据填充进去

  • 使用clear方法可以清楚输入框中的内容(如果输入窗有内容)
inputTag.clear() # 清楚输入框的内容
  • 操作checkbox

如果想要选中表单里的checkbox标签,我们是通过鼠标点击的,因此可以使用click() 方法,操作如下:

rememberTag = driver.find_element_by_name("rememberMe") # 找到checkbox
rememberTag.click() # 点击找到的checkbox
  • 操作按钮Button

操作按钮有许多方式,比如单击、右击、双击等等。这里讲最常用的单击操作,直接调用click函数,操作方式如下:

inputTag = driver.find_element_by_id('su') # 找到按钮
inputTag.click() # 点击它
  • 选择select

select元素我们不能直接点击,因为点击后,我们还需要选择我们要的元素。因此Selenium专门为select标签提供了一个类:

# selenium.webdriver.support.ui.Select
# . 表示class类 # id
driver.find_element_by_css_selector('.s_ipt').send_keys('python')

将获取到的元素当成参数传到这个类中,创建这个对象。之后就可以使用这个对象进行选择了。

3. 行为链

可能在页面中的操作可能需要很多步,那么这个时候可以使用鼠标行为链类ActionChains来完成,比如现在要将鼠标移动到某个元素上执行点击事件

actions = ActionChains(driver)
action.move_to_element(inputTag)
action.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitTag)
actions.content_click()
actions.click(submitTag)
actions.perform()

更多相关鼠标的操作:

  • click_and_hold(element): 点击但不松开鼠标
  • context_click(element): 右键点击
  • double_click(element): 双击

更多方法可以参考:https://selenium-python.readthedocs.io/api.html

4. Selemium 页面等待

4.1 Cookie 操作
  • 获取所有的cookie
cookies = driver.get_cookies()
  • 根据cookie的name获取cookie
value = driver.get_cookie(key)
  • 删除某个cookie
driver.delete_cookie('key')
4.2 页面等待

现在的网页越来越多使用了Ajax技术,这样程序就不能确定何时某个元素全部完全加载了出来。如果实际页面等待事件过长,某个元素还没加载出来,但是代码直接使用了WebElement,那么它就会抛出异常NullPointer。为了解决这个问题,所有Selenium提供了两种的等待方式,第一种是隐式等待,另一种是显示等待。

  • 隐式等待:在获取不可用的元素之前,会先等待10秒中的时间
# 调用 driver.implicitly_wait
driver.implicitly_wait(10) # 隐式等待10秒
  • 显示等待:当某个元素条件成立后才执行获取元素的操作,也可以等待的时候指定一个最大的时间,如果超出时间就会抛出异常。

操作方式如下案例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://www.google.com')

try:
    element = WebDriver(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()

其它等待条件:

  • presence_of_element_located: 某个元素已经加载完毕了。
  • presence_of_all_elements_located: 网页中所有满足条件的元素都加载完毕了。
  • element_to_be_clickable: 某个元素式可以点击了。

更多条件参考:https://selenium-python.readthedocs.io/waits.html

5. 打开多窗口和切换页面

  • 有时候窗口有很多子tab页面,这时候肯定是需要进行切换的。Selenium提供了一个叫做switch_to_window 来进行切换,这样就能操作多窗口了,而具体切换到哪个窗口,可以从driver.window_handles 中找到。
# 打开一个新的页面
driver.execute_script("window.open('url')")

print(driver.current_url)

# 切换到这个新的页面中
driver.switch_to_window(self.driver.window_handles[1])

YenYoong☕

当你能梦的时候就不要放弃梦~😎

文章评论