zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    物联网与边缘计算的融合
    在【自我认知】大学,你可能永远毕不了业
    Spring Security实现短信验证码登录
    线上课程
    【技术人成长】公众号
    大数据是阿猫阿狗都能玩的吗
    机器不能代替你思考
    如何缓解需求沟通中的鸡同鸭讲
    如何成为一个更渊博的技术人
    招聘季,聊聊那些古怪的候选人
  • 原文地址:https://www.cnblogs.com/hqq2019-10/p/13954976.html
Copyright © 2011-2022 走看看