selenium(一)

一、原理

  在客户端完成selenium脚本的编写,将脚本传送给selenium服务器,selenium服务器使用浏览器驱动(driver)与浏览器(browser)进行交互。

二、核心组件

  WebDriver:使用浏览器提供的API控制浏览器,模拟用户操作浏览器; 

  IDE:录制      

  Grid:分布式

三、安装

  pip3 install selenium

   各浏览器驱动下载地址:http://www.seleniumhq.org/download/

四、demo1

1 # 百度一下
2 
3 from selenium import webdriver
4 
5 def test_search():
6     driver = webdriver.Chrome()
7     driver.get('https://www.baidu.com')
8     search = driver.find_element_by_id('su').get_attribute('value')
9     assert search == '百度一下'
View Code

五、等待方式

  1)显式等待

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 显示等待
WebDriverWait(self.driver,10).until(
         expected_conditions.element_to_be_clickable(By.ID,'su')
        )

  2)隐式等待

# 隐式等待
self.driver.implicitly_wait(5)

  3)强制等待

import time

time.sleep(3)

  4) demo

 1 # 访问爱测 https://home.testing-studio.com,点击所有分类,点击答疑区
 2 # 三种等待方式:强制等待、显示等待、隐式等待
 3 
 4 
 5 import time
 6 from selenium import webdriver
 7 from selenium.webdriver.common.by import By
 8 from selenium.webdriver.support import expected_conditions
 9 from selenium.webdriver.support.wait import WebDriverWait
10 
11 
12 class TestHogwarts():
13     def setup(self):
14         self.driver = webdriver.Chrome()
15         self.driver.get('https://home.testing-studio.com')
16         # 隐式等待
17         self.driver.implicitly_wait(5)
18 
19     def teardown(self):
20         time.sleep(3)
21         self.driver.quit()
22 
23 
24     def test_hogwarts(self):
25         # 点击所有分类
26         category_name = (By.XPATH,'//*[@id="ember139"]/div/span/span[2]/span')
27         print(category_name)
28         time.sleep(3)
29         print('test')
30         self.driver.find_element_by_xpath('//*[@id="ember21"]').click()
31         time.sleep(3)
32         # 显示等待
33         WebDriverWait(self.driver,10).until(
34             expected_conditions.element_to_be_clickable(category_name)
35         )
36         self.driver.find_element(*category_name).click()
37         # self.driver.find_element_by_xpath('//*[@id="ember139"]/div/span/span[2]/span').click()
View Code

六、常见定位方式

  1)根据id定位

driver.find_element_by_id('su')

  2)根据name定位

driver.find_element_by_name('wd')

  3)根据XPATH定位 (xml path language)

driver.find_element_by_xpath('//*[@id="su"]')

  验证XPATH定位是否正确,可以使用console输入$x('//*[@id="su"]')

  4)根据CSS定位 (css_selector) 

driver.find_element_by_css_selector('#su')

  定位class=one        .one

  定位id=one    #one

   5)  根据link定位

# 全部匹配
driver.find_element_by_link_text('欢迎光临')
# 部分匹配
driver.find_element_by_partial_link_text('欢迎')

      6)  根据tag定位

driver.find_element_by_tag_name('input')

   7)  根据class_name定位

driver.find_element_by_class_name('active')

六、selenium常见操作

  1)输入、点击、清除

    对应selenium中的send_keys、click、clear

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_name('wd').send_keys('码学课堂')
driver.find_element_by_id('su').click()
driver.find_element_by_name('wd').clear() 

  2)关闭窗口、浏览器

     关闭当前句柄close(),关闭整个进程quite()

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 关闭当前窗口
driver.close()
# 关闭浏览器
driver.quit()

  3)获取元素属性

     获取元素标签上的属性get_attribute(''value)

     元素的坐标location

     元素的大小size

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
search = driver.find_element_by_id('su')
print(search.get_attribute('value'))
print(search.location)
print(search.size)


输出:
百度一下
{'x': 844, 'y': 188}
{'height': 44, 'width': 108}

  4)获取网页源代码、刷新页面

     网页源代码page_source

       刷新页面refresh()

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 刷新页面
driver.refresh()
# 打印当前页面的源码
print(driver.page_source)

  5)设置窗口大小

     最小化窗口minimize_window()

     最大化窗口maximize_window()

     设置窗口的具体大小set_window_size(width,height)

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 最小化窗口
driver.minimize_window()
# 最大化窗口
driver.maximize_window()
# 将浏览器设置为1000*1000的大小
driver.set_window_size(1000,1000)

 

原文地址:https://www.cnblogs.com/hd-test/p/13192273.html