selenium的面试题
1、UI自动化的工作原理
脚本连接Webdriver驱动,Webdriver驱动直接驱动浏览器来模拟一些人的操作,如点击按钮,输入字符串等操作
2、selenium提供了两个类webdriver和webelement
1、webdriver
webdriver对象看做成一个控制整个浏览器的遥控器,用它可以操作整个浏览器包括当前打开
的整个页面。实现的功能有:
1、当前页面上的选择符合查找条件的对象
2、打开网址, 回退,前进,刷新网页
3、获取、改变浏览器窗口大小,关闭浏览器,截屏
4、获取、设置cookies
driver.get_cookies()
2、webelement
webelement对象就是对应某个页面元素的遥控器,通过它可以操作某个元素相关的东西:
1、在当前web元素的所有子元素里面符合查找条件的对象
2、操作该web元素,比如:
1、点击元素
2、输入字符
3、获取元素坐标、尺寸、文本内容、其它的属性信息
3、两者差别:
1、通过webdriver对象选择,查找范围是整个html文档
2、通过webelement对象选择,查找范围是该对象的子元素
3、选择web元素的8中方法
1、通过id选择元素
方法1:
element = driver.find_element_by_id("kw")
2、通过name选择元素
方法1:
element = driver.find_element_by_name("cheese")
3、通过class选择元素
方法1:
element = driver.find_element_by_class_name("cheese")
4、通过tag(标签)选择元素
方法1:
element = driver.find_element_by_tag_name("title")
5、通过超文本链接选择元素
方法1:
element = driver.find_element_by_link_text("百度一下")
6、通过部分超文本选择元素
方法1:
element = driver.find_element_by_partial_link_text("百度")
7、通过xpath选择元素
方法1:
element = driver.find_element_by_xpath("//*[@id="kw"]")
8、通过css选择元素
方法1:
element = driver.find_element_by_css_selector("???")
4、如何获取元素标签属性值
attribute = driver.find_element_by_id("tag_a").get_attribute('href')
get_attribute('outerHTML'):获取该属性html源码
get_attribute('innerHTML'):获取该属性里面html源码(不包含该属性)
get_attribute('innerTEXT'):获取该属性里面文本(不包含该属性)
5、frame特殊的元素如何切换
webdriver切换frame的方法
driver.switch_to.frame(frame_reference)
这个frame_reference可以有三种情况
1、frame元素的name属性值或者ID属性值
2、索引值(从0开始):数字
3、frame 所对应的WebElement :driver.find_element_by_tag_name("iframe")
6、对话框处理(弹框):
ale = driver.switch_to.alert #后面要加相应的操作
点击ok 获取文本 点击cancel(取消) 输入内容
alert accept() text N/A N/A
confirm accept() text dismiss() N/A
prompt accept() text dismiss() send_keys()
例子:
driver.switch_to.alert.accept() #点击ok操作
driver.switch_to.alert.text #获取文本
driver.switch_to.alert.dismiss() #点击cancel操作
driver.switch_to.alert.send_keys() #输入内容
7、模拟鼠标悬停
模拟鼠标移动到某个元素上,通过其方法 move_to_element(ele) 实现.参数是
webelement对象,表示你要移动到这个元素对象上
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(ele).perform()
8、获取窗口的大小,改变窗口大小
可以使用set_window_size这个方法,参数传递宽度和高度,单位是像素
driver.maximize_window():设置最大窗口 [ˈmæksɪmaɪz]
比如,改变窗口宽度:
size = driver.get_window_size()#获取窗口的宽高,返回的是字典
宽x = driver.get_window_size()['width']
高y = driver.get_window_size()['height']
driver.set_window_size(1100,size['height'])#设置宽,高
python面试题
1、python 的核心数据类型
数字(整型数int,浮点型数float,复数complex, 布尔型bool)
字符串 str
容器(列表 list,tuple,dict,set 等)
2、自动化内存管理和引用计数:
每个对象都会记录有几个变量绑定(引用)自身,当引用的数量为0时,则此对象将被销毁(释放内存资源), 此种自动化内存管理的方式叫引用计数(机制)
3、单引号,双引号,三引号的区别、联系
可以互相包含,互换,三引号字符串中的换行会自动转换为换行符
4、简单说几个转义字符
' 单引号(')
" 双引号(")
\ 一个反斜杠
\n 换行
\r 返回光标至行首(回车)。print(“12345\rabc”) 输出:abc45,\r后的字符移到行
首,同等数量地替换行首字符
\t 水平制表符(tab键)。print(“a\tb”),输出:a b
\v 垂直制表符(类似换行符)
\f 分页。print("a\fb") 输出文本显示在两页,终端输出:显示向上的箭头
\b 退格,删除前一个字符。例:print("ab\b") 输出:a
等
5、为什么有时候要在字符串前面加r
让转义符号 \ 无效
6、给你一个1~10的列表,用切片取出是3的倍数的数
L[2::3]或L[-1::3]
7、字符串格式化占位符的三种方法
1、%格式符
%s 字符串,使用str(obj)转为字符串
%r 字符串,使用repr(obj) 转为字符串
%d 十进制整数
等
2、format()
print('名字是 {name},年龄是 {age}'.format(name='tom' ,age = 18))
3、f''- python 3.6 以后
print(f'名字是{name},年龄是{age}')
8、给你一个数据混乱的列表,[72,33,88,12,14,39],不用python内部封装好的方法,自己用冒泡排序,重新将列表从小到大排序
L= [72,33,88,12,14,39]
n = len(L)
for i in range(n):
for j in range(0, n -i -1):
if L[ j ] > L[ j +1 ]:
L[ j ] , L[ j + 1 ] = L[ j + 1 ] , L[ j ]
print(L)
9、 函数形参自左至右的顺序为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
10、python的作用域和变量名查找规则(顺序)
python 的作用域
作用域也叫名字空间,是访问变量时查找变量名的范围空间
python的四个作用域:
作用域 英文解释 英文缩写
局部作用域(函数内) Local(function) L
外部嵌套函数作用域 Enclosing function locals E
函数定义所在模块(文件、全局)作用域 Global(module) G
Python内建模块的作用域 Builtin(Python) B
变量名的查找规则
在变量访问时,先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量,最后是内建变量
即:
L ----> E ----> G ----> B
在默认的情况下,变量名赋值会创建或者改变当前作用域的变量