测试八股文-Selenium
总结了一些selenium的常见问题,欢迎评论区补充,如需教学辅导可私信作者
什么是Selenium
?
Selenium
是一个自动化测试框架,用于模拟用户在Web应用程序中的交互行为。它支持多种语言,包括Java、Python、Ruby等
Selenium
有哪些组件?
Selenium由三个组件组成:Selenium IDE
、Selenium WebDriver
和Selenium Grid
- Selenium IDE是一个浏览器插件,用于录制和回放用于在Web应用程序中的交互行为
- Selenium WebDriver是一个用于编写自动化测试脚本的API,它支持多种编程语言
- Selenium Grid是一个分布式的测试工具,用于在多台计算机上并行运行测试
什么是WebDriver
?
WebDriver
是Selenium的一个API,用于编写自动化测试脚本。它提供了一组方法,用于模拟用户在Web应用程序中的交互行为,如点击链接,填写表单,提交表单等。
WebDriver
有哪些常用的方法?
- get:打开指定url
- find_element:查找页面上的元素
- send_keys:向页面上的元素发送输入
- click:点击页面上的元素
- submit:提交表单
- get_attribute:获取元素的属性值
- text:获取元素的文本内容
如何处理弹出窗口?
-
浏览器的弹窗有三种:
Alert
(仅有确认按钮)、Confirm
(确认或取消)、Prompt
(带有输入框),我们无法通过元素定位来操作driver.switch_to.alert.accept() //确认,三种弹窗都可以 driver.switch_to.alert.dismiss() //取消、不同意 confirm和prompt可以使用 dirver.switch_to.alert.text //打印弹窗信息 driver.switch_to.alert.send_keys(text) //向弹窗中输入内容
如何模拟鼠标和键盘操作?
-
操作键盘可以使用
selenium.webdriver.common.keys
包 -
操作鼠标可以使用
selenium.webdriver.common.action_chain
包pythonmove_to_element():将鼠标移动至指定的element对象 click():执行单击操作 click_and_hold():单击不释放 release():释放单击 double_click():双击操作 context_click() :右键单击 perform():立即执行操作
如何处理下拉框?
使用selenium.webdriver.support.select
下的Select类,可以通过以下三种方式对元素进行选择
- 通过索引:
Select(el).select_by_index(1)
- 通过value属性值:
Select(select_element).select_by_value("1990")
- 通过显示文本进行选择:
Select(el).select_by_visible_text("2020")
如何在多个窗口间进行切换?
- 先获取所有的创建,调用
driver.window_handles
会返回一个窗口数组 - 如果需要获取当前窗口可以调用
chrome.current_window_handle
- 如果需要切换窗口可以调用
driver.switch_to_window(windows[index])
,浏览器每打开一个窗口会在列表尾部添加一个窗口对象,index=-1时则会切换到新打开的窗口
如何进入和退出iFrame
进入
1.使用iframe的name属性进行切换drvier.switch_to.frame("attr_name")
2.先找到该iframe
,然后再切换driver.switch_to.frmae(driver.find_element_by_name("attr_name"))
3.使用索引找到该iframedriver.switch_to.frame(4)
退出
1.如果需要切换到最外层则使用:driver.switch_to.default_content()
2.切换到上一层的iframe
python
driver.switch_to.parent_frame()
Selenium中的八大选择器
查找方式 | 方法名称 |
---|---|
根据ID属性 | find_element_by_id |
根据name属性 | find_element_by_name |
根据超链接的文字信息 | find_element_by_link_text |
根据超链接的部分文字信息 | find_element_by_partial_link_text |
根据tag名称 | find_element_by_tag_name |
根据class名称 | find_element_by_class_name |
根据xpath表达式 | find_element_by_xpath |
根据css选择器 | find_element_by_css_selector |
Selenium
如何执行JS
脚本
selenium中提供了操作js
脚本的方法
python
driver.execute_script(script,args)
Selenium
如何截取屏幕
driver.get_screenshot_as_file(path)
Selenium
三种等待
-
隐式等待:就是在创建driver时,为浏览器对象创建一个等待时间,这个方法得不到某个元素就等待一段时间,直到拿到某个元素位置,在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部不断的刷新页面去寻找我们需要的元素,只写一次,全局有效,针对于页面加载
pythondriver.implicitly_wait()
-
显示等待:明确的要等到某个元素的出现,等不到就一直等,除非在规定的时间之内都没找到
需要使用
selenium.webdriver.support.expected_conditions
和selenium.webdriver.support.wait.WebDriverWait
pythonfrom selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait # 显示等待 # 在当前浏览器,最长等待20s, 每间隔1s确认一次,直到,传入的元素定位是可见的 username_loc = (By.NAME, "username") #构建WebDriverWait对象,调用until方法 WebDriverWait(driver,20,1).until(EC.visibility_of_element_located(username_loc)
-
强制等待:
python
pythontime.sleep(timer)
Java
Thread.sleep(time) TimeUnit.时间单位.sleep(time)
元素定位不到可能是为什么?
UI
被改动- 网络卡顿
- 元素被嵌套再
iframe
中 - 元素被嵌到
shadow-root
中 - 页面元素是动态的(每次刷新后元素属性会发生变化)
- 由于元素被遮挡,需要通过js点击
- 定位表达式有误