Selenium API高级

弹出框操作

 1) 进入到弹出框中
    driver.switch_to.alert

2) 接收警告
    accept()

3) 解散警告
    dismiss()

4) 发送文本到警告框
    send_keys(data)

鼠标和键盘操作

手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供

1)鼠标操作

    导入动作链类,动作链可以储存鼠标的动作
    from selenium.webdriver import ActionChains     
    获取元素                                                                                                                                el = driver.find_element_by_xxx(value)
    context_click(el)       对el执行右击
    执行ActionChains中储存的所有动作
                   perform()

1)键盘操作
键盘操作使用的是Keys类,一般配合send_keys使用

    * 导入
    from selenium.webdriver.common.keys import Keys

    * 常用键盘操作
        send_keys(Keys.BACK_SPACE)  删除键(BackSpace)
        
        send_keys(Keys.SPACE)       空格键(Space)
        
        send_keys(Keys.TAB)             制表键(Tab)
        
        send_keys(Keys.ESCAPE)      回退键(Esc)
        
        send_keys(Keys.ENTER)       回车键(Enter)
        
        send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)
        
        send_keys(Keys.CONTROL,‘x’)     剪切(Ctrl+X)
        
        send_keys(Keys.CONTROL,‘v’)     粘贴(Ctrl+V)
        
        send_keys(Keys.F1)          键盘 F1
        ……
        send_keys(Keys.F12)             键盘 F12

浏览器等待

1) 为什么要进行等待?
    
    1.网速慢

    2.网站内容过多

    3.如果不进行等待而直接定位元素,可能会抛出异常

2) selenium中等待的分类:
                         强制等待
    
    显示等待
    
    隐式等待

导入定时等待库

from time import sleep 或者 import time

time.sleep(10) # 表示强行等待10s在执行下一句代码 这种等待方式时间到了就会执行下个语句,但比较死板,不能保证在等待的时间内元素真正被加载了出来。而且如果等待的元素已经被加载出来,还需要等待到时间才会执行下一句,浪费时间。
driver.implicitly_wait(30) #等待30s

这个等待表示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。�这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。

注:隐式等待的作用域是全局,所以一般设置在整局代码的头几行。
隐式等待采用全部设置,也就是说,你所有的findElement方法都会最多等待30s

需要导入的包

from selenium.webdriver.support.wait import WebDriverWait #导入显性等待的包
from selenium.webdriver.support import expected_conditions as EC #判断所需要的元素是否已经被加载出来
from selenium.webdriver.common.by import By #定位

WebDriverWait类是由WebDirver 提供的等待方法。显示等待明确的要等到某个元素的出现,在设置时间内每隔x秒去判断一下指定的元素是否加载完,加载完了就执行下一步,否则继续每隔x秒去判断,指定时间截止。如果超时就会抛出异常。

例如:WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,"g-hu")))

强制等待:傻瓜式等待,不智能�隐式等待:全局通用,只需设置一次,很智能(等到了就走,不会浪费时间)
显式等待:等待元素处于特定条件的时候使用,很智能(等到了就走,不会浪费时间)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
driver=webdriver.Chrome()
# driver.implicitly_wait(20)
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("淘宝")
driver.find_element_by_id("su").click()

driver.implicitly_wait(20)
driver.find_element_by_xpath("/html/body/div[2]/div[4]/div[1]/div[3]/div[2]/div/div/div[1]/div/div[1]/div/div/h3/div/a[1]").click()
#获取所有窗口的句柄
handles = driver.window_handles
#通过窗口的句柄进入的窗口
driver.switch_to.window(handles[1])
# 登录
driver.find_element_by_xpath("/html/body/div[1]/div/ul[1]/li[1]/div/a[1]").click()
driver.find_element_by_xpath("/html/body/div/div[2]/div[3]/div/div/div/div[1]/i").click()
# driver.find_element_by_name("fm-login-id").send_keys("17835720703")
# driver.find_element_by_name("fm-login-password").send_keys("ccc123...")
driver.find_element_by_id("J_search_key").clear()
driver.find_element_by_id("J_search_key").send_keys("华硕飞行堡垒9电脑")

#定位搜索按钮并点击
driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[1]/div/div[1]/form/input").click()
#定位硬盘容量
# driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/div[1]/div[14]/div/div[2]/div/div[3]/div[2]/div[1]/div/a[1]/span[2]").click()
#选择电脑
driver.find_element_by_xpath("/html/body/div[2]/div[1]/div[2]/ul/li[1]/a/img").click()
# driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[3]/div[1]/div[21]/div/div/div[1]/div[3]/div[1]/div/div[1]/a/img").click()
#获取所有窗口的句柄
handles = driver.window_handles
#通过窗口的句柄进入的窗口
driver.switch_to.window(handles[2])
#选择内存容量
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/dl[1]/dd/ul/li[2]/a/span").click()
#选择硬盘容量
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/dl[2]/dd/ul/li[2]/a/span").click()
#选择颜色
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/dl[3]/dd/ul/li[3]/a/span").click()
#加入购物车
driver.find_element_by_xpath("/html/body/div[5]/div/div[2]/div/div[1]/div[1]/div/div[4]/div/div/div[2]/div[2]/a")
#进入购物车 删除
driver.find_element_by_xpath("/html/body/div[2]/div[2]/div/ul/li[3]/a").click()
#删除
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div/div[2]/div/div/div/div/ul/li[7]/div/a[2]").click()

你可能感兴趣的:(Selenium API高级)