python_selenium(3)

269 阅读4分钟

回顾:前面主要讲解了一些基础问题,大家可以通过测试登入页面的用例,自己写一些脚本来巩固自己,面试的话那就靠你自己编了,什么项目什么的这种问题实在无力吐槽。

4.1 多窗口

首先让我们来掉出一个多窗口页面出来,还是百度首页。

#!bin/usr/env python
#encoding:utf-8
#首要导入工作需要的python库
import selenium
import time
from selenium import webdriver
#web相当于对象浏览器的一个具体的值
web=webdriver.Chrome()
#设置默认等待时间,避免突发情况
web.implicitly_wait(10)
#浏览器获取页面
web.get('https://www.baidu.com/')

然后通过js打开第二个窗口

js = 'window.open("https://www.baidu.com/")'
web.execute_script(js)

现在我们有两个窗口了,然后们来切换第二个窗口进行操作吧

#--------------------------------------------------窗口问题
handle=web.window_handles
print(handle)#输出所有窗口句柄
now_handle=web.current_window_handle
print(now_handle)#输出当前窗口句柄
web.switch_to.window(handle[2])
web.find_element_by_id('kw').send_keys('elemnet属性和方法')
#--------------------------------------------------窗口问题

1.2 ActionChains类(鼠标事件)

在练习鼠标事件之前,我们需要导入一个包

from selenium.webdriver.common.action_chains import ActionChains

别问我为什么要导入,我也不知道。

下面主要讲下:

鼠标悬浮 move_to_element

鼠标右击 content_click

鼠标双击 double_click

鼠标左击 click(这个就不说了)

actionchains=ActionChains(web)# 进行鼠标类的实例化
# actionchains.context_click(web.find_element_by_partial_link_text('新闻')).perform()#鼠标右击事件
# actionchains.double_click(web.find_element_by_id('su')).perform()#鼠标双击事件 没素材所以没效果
# actionchains.context_click(web.find_element_by_partial_link_text('新闻')).perform()
actionchains.move_to_element(web.find_element_by_xpath('//*[@id="u1"]/a[8]')).perform()#鼠标悬浮到设置按钮
time.sleep(3)

1.3 下拉框

Selenium使用下拉框类的时候需要导入,

from selenium.webdriver.support.select import Select

下拉框定位的3种方法:

索引定位、value定位、文本定位

索引定位:

actionchains.move_to_element(web.find_element_by_xpath('//*[@id="u1"]/a[8]')).perform()#鼠标悬浮到设置按钮
time.sleep(3)
#--------------------------------------------------鼠标事件
web.find_element_by_xpath('//*[@id="wrapper"]/div[6]/a[1]').click()
web_num=web.find_element_by_id('nr')#下拉框元素
select=Select(web_num)# 对下拉框元素实例化
select.select_by_index(2)
# Select(web.find_element_by_id('se-setting-3')).select_by_index(2)
print('下拉框选择的条数是:{0}'.format(web_num.get_attribute('value')))

value值定位

select.select_by_value(20)

文本定位

select.select_by_visible_text('每页显示50条')

1.4 弹出框

弹出框:大概有3种:Alert警告框、Confirm确认框、Prompt消息对话框

导入:

from selenium.webdriver.common.alert import Alert

第一点讲:Alert弹出框 Accept()方法

点击保存按钮,会弹出该alert警告框:

# web.find_element_by_css_selector('#gxszButton > a.prefpanelgo').click()#点击保存设置按钮 出错了。。那就换个方法
element1=web.find_element_by_css_selector('#gxszButton > a.prefpanelgo')
actionchains.move_to_element(element1).click(element1).perform()
time.sleep(3)
web.switch_to.alert.accept() #alert后面的括号如果报错就去掉

第二点:Confirm确认框 accept方法和dismiss方法

找不到素材,懒得写html脚本。随意认识下确认框,然后自己百度吧

第三点:Prompt消息对话框send_keys方法 accept方法 dismiss方法

注意点:以上三种方法都是通过Alert调用。不要当成webelement

4.5 键盘事件

首先导入

from selenium.webdriver.common.keys import Keys

主要讲几个经常操作的按键:

Send_keys(Keys.CONTROL,’a’) 全选

Send_keys(Keys.CONTROL,’c’) 复制

Send_keys(Keys.CONTROL,’v’) 粘贴

Send_keys(Keys.VACKSPACE) 删除

#--------------------------------------------------键盘事件
web.find_element_by_id('kw').send_keys('elemnet属性和方法')
web.find_element_by_id('kw').send_keys(Keys.CONTROL,'a')
web.find_element_by_id('kw').send_keys(Keys.CONTROL,'c')
web.find_element_by_id('kw').clear()
web.find_element_by_id('kw').send_keys(Keys.CONTROL,'v')
web.find_element_by_id('kw').send_keys(Keys.BACKSPACE)
#--------------------------------------------------键盘事件

显示太快的话就用time.sleep()控制下

4.6 Iframe框架

Iframe框架可以分为嵌套和不嵌套

定位方法:id、name、索引

切换iframe方法:

        web.switch_to.frame()

多层iframe就多切换几次

返回主文档

web.switch_to.default_content()

返回父类iframe

web.switch_to.parent_frame()

4.7 等待事件

固定等待

import time
time.sleep(3)

固定等待多长时间


隐式等待

from selenium.webdriver.support.ui import WebDriverWait
web.implicitly_wait(30)

selenium的一个方法,对代码中的没有找到的元素,会在方法设置的时间持续尝试执行。如果时间到了,还未能执行成功则报错

显示等待

通常是webDriverWwait与expected_conditions结合起来应用

通过expected_conditions来判断真假在决定是否继续执行,返回的是WebElemnet类的实例对象

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

browser = webdriver.Chrome()
browser.get('https://www.jianshu.com/')
#显示等待
#login=WebDriverWait(browser, 10).until(lambda x : browser.find_element_by_xpath('//*[@id="sign_in"]'))
login=WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="sign_in"]')))
login.click()

元素可见并且可操作后继续执行 element_to_be_clickable

指定元素位置的文本内容符合 text_to_be_present_in_element

元素可见后继续执行 visibility_of_element_located

1.8 js的处理

元素定位那块就是js的应用,具体是selenium通过execute_script调用js脚本。需要对js有一定了解。还请大家自行了解,有空的话我再补上这节内容


如有侵权请联系,一周内删除

欢迎关注公众号:测试学python之个人笔记(很渣的界面,自己写的也很凌乱,但是有问题可以留言,周末看~)