Selenium的基本api

1、打开浏览器的驱动,以chrome为例

from selenium import webdriver
#chrome驱动
driver =  webdriver.Chrome(executable_path="c:\\chromedriver")
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw")  #返回一个页面元素
driver.find_element_by_id("kw").send_keys("光荣之路")

 

2、浏览器最大化,前进和后退

>>> driver.maximize_window()  #浏览器窗口最大化
>>> driver.back() #浏览器后退
>>> driver.forward() #浏览器前进

 3、强制刷新

>>> driver.refresh()  #强制刷新页面

4、控制浏览器的位置:把浏览器放到固定的位置

>>> driver.set_window_position(y=200, x=400)
>>> position = driver.get_window_position()
>>> position
{'x': 400, 'y': 200}

 5、设置窗口大小

>>> driver.set_window_size(width = 200, height = 400, windowHandle='current')
>>> driver.get_window_size()
{'width': 516, 'height': 400}

6、获取title,判断在哪个页面

>>> driver.get("http://iciba.com")
>>> driver.title
'在线翻译_在线词典_金山词霸_爱词霸英语'

7、获取源码

>>> driver.get("http://iciba.com")
>>> driver.page_source[:50]
'<!DOCTYPE html><html xmlns="http://www.w3.org/1999'

8、断言源码中的关键字

>>> assert "英语" in driver.page_source  #源码中存在
>>> assert "英语1" in driver.page_source #源码中不存在
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

9、获取当前url

>>> driver.current_url

10、句柄操作

# 获取当前窗口句柄
now_handle = driver.current_window_handle

# 获取所有窗口句柄
all_handles = self.driver.window_handles

# 切换窗口
self.driver.switch_to.window(handle)

 拿到句柄就像找到了窗口。

切换句柄代码举例:

#encoding=utf-8
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        # 启动chrome浏览器
        self.driver = webdriver.Chrome()

    def test_operateWindowHandle(self):
        url = "http://www.baidu.com"
        self.driver.get(url)
        # 获取当前窗口句柄
        now_handle = self.driver.current_window_handle
        # 打印当前获取的窗口句柄
        print (now_handle)
        # 百度搜索输入框中输入“selenium”
        self.driver.find_element_by_id("kw").send_keys("w3cschool")
        # 点击搜索按钮
        self.driver.find_element_by_id("su").click()
        # 导入time包
        import time
        # 等待3秒,以便网页加载完成
        time.sleep(3)
        # 点击w3school在线教育链接
        self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
        time.sleep(5)
        # 获取所有窗口句柄
        all_handles = self.driver.window_handles
        print(all_handles)
        # 循环遍历所有窗口句柄
        for handle in all_handles:
            self.driver.switch_to.window(handle)
            #判断源码的关键字
            print('*'*50)
            print(self.driver.current_url)
            print('*'*50)
            if "百度热榜" in self.driver.page_source:
                time.sleep(5)
                self.driver.find_element_by_xpath("//*[@id='5']/h3/a").click()
                time.sleep(5)
                self.driver.close()
            elif "培训和测试" in self.driver.page_source:
               time.sleep(5)
               self.driver.find_element_by_xpath('//*[@id="course"]/ul/li[5]/a').click()
               time.sleep(5) 

    def tearDown(self):
        # 退出IE浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()
View Code

 11、获取页面元素的基本信息

driver.get("https://www.baidu.com")
newsElement = driver.find_element_by_xpath("//*[text()='新闻']")
print (u"元素的标签名:", newsElement.tag_name)  #元素的标签名: a
print (u"元素的size:", newsElement.size)       #元素的size: {'height': 23, 'width': 26}
print(u"元素的文本:",newsElement.text)          #元素的文本: 新闻
print(u"元素的链接:",newsElement.get_attribute("href")) #元素的链接: http://news.baidu.com/

12、判断页面元素是否显示

driver.get(url)
div1 = driver.find_element_by_id("div1")
print (div1.is_displayed()) #判断是否见

13、判断元素是否可操作

driver.get(url)
input1 = self.driver.find_element_by_id("input1")
print (input1.is_enabled())

14、页面元素的属性

driver.get(url)
# 找到搜索输入框元素
searchBox = driver.find_element_by_id("query")
# 获取搜索输入框页面元素的name属性值
print (searchBox.get_attribute("name"))

# 向搜索输入框中输入“测试工程师指定的输入内容”内容
searchBox.send_keys(u"测试工程师指定的输入内容")
# 获取页面搜索框的value属性值(即搜索输入框的文字内容)
print (searchBox.get_attribute("value"))

15、获取css属性值

driver.get(url)
searchBox = driver.find_element_by_id("kw")
searchBox.value_of_css_property("height")
searchBox.value_of_css_property("width")
searchBox.value_of_css_property("font-family")

16、清空输入框

driver.get(url)
input = driver.find_element_by_id("kw")
input.send_keys(u"测试开发招聘")
input.clear() #清空输入框

17、单击元素

driver.get(url)
button = driver.find_element_by_id("button")
button.click() #模拟鼠标左键单击操作

18、双击元素

from selenium.webdriver import ActionChains

driver.get(url)
inputBox = driver.find_element_by_id("inputBox") 
action_chains = ActionChains(driver)
action_chains.double_click(inputBox).perform() #固定用法

19、操作下拉框

 方法1:

driver.get(url)
# 使用name属性找到页面上name属性为“fruit”的下拉列表元素
select = self.driver.find_element_by_name("fruit")
all_options = select.find_elements_by_tag_name("option")
for option in all_options:
    if option.text =="猕猴桃":
        option.click()

方法2:

driver.get(url)
# 导入Select模块
from selenium.webdriver.support.ui import Select
# 使用xpath定位方式获取select页面元素对象
select_element = Select(driver.find_element_by_xpath("//select"))

# 方法一:通过序号选择第二个元素,序号从0开始
select_element.select_by_index(1)

# 方法二:通过选项的显示文本选择文本为“猕猴桃”选项
select_element.select_by_visible_text("猕猴桃")

# 方法三:通过选项的value属性值选择value=“shanzha”选项
select_element.select_by_value("shanzha")

 

20、断言

 继承unittest.TestCase,使用 assertListEqual()

 

21、操作多选框

driver.get(url)
# 导入Select模块
from selenium.webdriver.support.ui import Select
# 使用xpath定位方式获取select页面元素对象
select_element = Select(driver.find_element_by_xpath("//select"))

#选中
# 通过序号选择第一个元素
select_element.select_by_index(0)
# 通过选项的文本选择“山楂”选项
select_element.select_by_visible_text("山楂")
# 通过选项的value属性值选择value=“mihoutao”的选项
select_element.select_by_value("mihoutao")

#取消选中
# 通过选项文本取消已选中的文本为“荔枝”选项
select_element.deselect_by_visible_text("荔枝")
# 通过序号取消已选中的序号为1的选项
select_element.deselect_by_index(1)
# 通过选项的value属性值取消已选中的value=“juzi”的选项
select_element.deselect_by_value("juzi")

 

22、操作单选框

driver.get(url)
# 使用xpath定位获取value属性值为'berry'的input元素对象,也就是“草莓”选项
berryRadio = driver.find_element_by_xpath("//input[@value='berry']")
# 点击选择“草莓”选项
berryRadio.click()

# 断言“草莓”复选框被成功选中
assertTrue(berryRadio.is_selected(), u"草莓复选框未被选中!")

23、操作复选框:同上

24、截图

driver.get_screenshot_as_file(filename)

25、拖拽元素

initialPosition = driver.find_element_by_id("draggable")
targetPosition = driver.find_element_by_id("draggable2")
from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
# 将页面上第一个能被拖拽的元素拖拽到第二个元素位置
action_chains.drag_and_drop(initialPosition, targetPosition).perform()

26、键盘操作

#encoding=utf-8
import unittest
import time
import chardet
from selenium import webdriver
 
class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        
    def test_simulateASingleKeys(self):
        url = "http://www.baidu.com"
        self.driver.get(url)
        # 导入模拟按键模块Keys
        from selenium.webdriver.common.keys import Keys
       
        # 输入框输入内容
        self.driver.find_element_by_id("kw").send_keys("seleniumm")
        time.sleep(5)
        
#通过WebDriver实例发送一个F12键 self.driver.find_element_by_id(
"kw").send_keys(Keys.F12) time.sleep(5)
# 删除多输入的一个 m self.driver.find_element_by_id(
"kw").send_keys(Keys.BACK_SPACE) time.sleep(10) # 输入空格键+“教程” self.driver.find_element_by_id("kw").send_keys(Keys.SPACE) self.driver.find_element_by_id("kw").send_keys("教程") time.sleep(10) # ctrl+a 全选输入框内容 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a') time.sleep(10) # ctrl+x 剪切输入框内容 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x') time.sleep(10) # ctrl+v 粘贴内容到输入框 self.driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v') time.sleep(10) # 通过回车键来代替单击操作 self.driver.find_element_by_id("su").send_keys(Keys.ENTER) time.sleep(10) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()

 27、鼠标右键

#鼠标右键
#encoding=utf-8
import unittest
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
import win32clipboard as w
import win32con

# 设置剪切板内容
def setText(aString):
    w.OpenClipboard()
    w.EmptyClipboard()
    w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
    w.CloseClipboard()


class VisitSogouByIE(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_rigthClickMouse(self):
        url = "http://www.sogou.com"
        # 访问搜狗首页
        self.driver.get(url)
        # 找到搜索输入框
        searchBox = self.driver.find_element_by_id("query")
        # 将焦点切换到搜索输入框
        searchBox.click()
        time.sleep(2)
        # 在搜索输入框上执行一个鼠标右键点击操作
        ActionChains(self.driver).context_click(searchBox).perform()
        # 将“gloryroad”数据设置到剪切板中,相当于执行了复制操作
        setText(u'gloryroad')
        time.sleep(4)
        # 发送一个粘贴命令,字符p指代粘贴操作
        ActionChains(self.driver).send_keys('P').perform()
        # 点击搜索按钮
        self.driver.find_element_by_id('stb').click()
        time.sleep(10)

    def tearDown(self):
        # 退出IE浏览器
        self.driver.quit()

if __name__ == '__main__':
    unittest.main()

 28、模拟鼠标左键和释放

from selenium.webdriver import ActionChains

driver.get(url)
div = driver.find_element_by_id("div1")

# 在id属性值为“div1”的元素上执行按下鼠标左键,并保持
ActionChains(driver).click_and_hold(div).perform()

# 在id属性值为“div1”的元素上释放一直释放的鼠标左键
ActionChains(driver).release(div).perform()

29、鼠标悬浮

from selenium.webdriver import ActionChains

driver.get(url)
# 找到页面上的链接元素
link = driver.find_element_by_partial_link_text(u"指过来")
# 找到页面上的p元素
p = driver.find_element_by_xpath("//p")

# 将鼠标悬浮到第一个链接元素上
ActionChains(driver).move_to_element(link).perform()

# 将鼠标从第一个链接元素移动到p元素上
ActionChains(driver).move_to_element(p).perform()

30、判断页面元素是否存在

driver.find_element(by, value)

# 判断页面元素id属性值为“query”的页面元素是否存在

driver.find_element("id", "query")
driver.find_element("xpath", "//input[@id='query']")

31、设置隐式等待

driver.implicitly_wait(10)

32、设置显式等待

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

driver = webdriver.Chrome()
driver.get("http://www.sogou.com")
input_box=driver.find_element_by_id("query")

#等待10s,每200毫秒重试一次
wait = WebDriverWait(driver, 10, 0.2)
# 每200ms判断一次是否元素可见
wait.until(expected_conditions.visibility_of(input_box))

33、切入切出frame

#1 使用索引方式进入指定的frame页面,索引号从0开始。
driver.switch_to.frame(0)

#2 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame
driver.switch_to.frame(driver.find_elements_by_tag_name("frame")[1])

#3 通过id进入frame
driver.switch_to.frame(driver.find_element_by_id("rightframe"))
#4 退出frame
driver.switch_to.default_content()

33、指定页面的加载时间

driver.set_page_load_timeout(4)

34、操作alert框

# 获取alert对象
alert = driver.switch_to.alert

# 使用alert.text属性获取alert框中的内容,并断言文字内容
assertAlmostEqual(alert.text, u"这是一个 alert 弹出框")

# 调用alert对象的accept()方法,模拟鼠标单击alert弹窗上的“确定”按钮,以便关闭alert窗
alert.accept()

# 取消按钮,模拟单击confirm框上的“取消”按钮
alert.dismiss()  

35、获取cookie

#得到当前页面下所有的Cookies
driver.get_cookies()
#根据Cookie的name值获取该条Cookie信息
driver.get_cookie("SUV")

# 删除cookie有2种方法
# 第一种:通过Cookie的name属性,删除name值为“ABTEST”的Cookie信息
driver.delete_cookie("ABTEST")
# 第二种:一次性删除全部Cookie信息
driver.delete_all_cookies()

# 添加自定义Cookie信息
driver.add_cookie({"name": "gloryroadTrain", 'value': '1479697159269020'})

 36、键盘的上下左右操作

driver.get("http://baidu.com")
搜索:element=driver.find_element_by_name("wd")
导入Keys:
from selenium.webdriver.common.keys import Keys
回车:element.send_keys(Keys.ENTER)
清理:element.clear()
上:element.send_keys(Keys.ARROW_UP)
下:element.send_keys(Keys.ARROW_DOWN)
左:element.send_keys(Keys.ARROW_LEFT)
右:element.send_keys(Keys.ARROW_RIGHT)

 

posted @ 2020-11-10 20:36  hqq的进阶日记  阅读(167)  评论(0编辑  收藏  举报