Python+Selenium 常见面试题整理

本文分享了使用Python和Selenium实现Qunar机票搜索场景的自动化测试代码,详细介绍了如何选择单程、输入出发和到达城市(以北京到上海为例)、设置出发日期,并执行搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 整理加复习
1、记录一下刚刚看到的博客https://www.cnblogs.com/lesleysbw/p/5916022.html中的一小段
在这里插入图片描述
非常认同

 看到一位大神的面试准备,我不想写了TT。等我好好看完,再决定怎么继续写下去吧,照搬毫无意义。大神博客地址:https://www.cnblogs.com/lesleysbw/category/946223.html

Qunar机票搜索场景

访问Qunar机票首页http://flight.qunar.com,选择“单程”,输入出发、到达城市,选择today+7日后的日期,点“搜索”,跳转到机票单程搜索列表页。

好像网上没有找到python实现,简单写了下

from selenium import webdriver
import datetime
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome(r'D:\chromedriver.exe')
driver.maximize_window()
driver.implicitly_wait(8)

driver.get("https://flight.qunar.com/")
single_way = driver.find_element_by_xpath('//*[@id="searchTypeSng"]')#单程
from_city = driver.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input')#出发城市
to_city = driver.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input')#到达城市
from_date = driver.find_element_by_xpath('//*[@id="fromDate"]')#出发时间

#选择单程
if (single_way.is_selected()):
    pass
else:
    single_way.click()

#选择到达城市-上海
action = ActionChains(driver)
action.move_to_element(to_city).click().perform()
driver.find_element_by_xpath("//div[@data-panel='domesticto-flight-hotcity-to']//a[@class='js-hotcitylist' and text()='上海']").click()
driver.implicitly_wait(8)

#选择出发城市-北京
action.move_to_element(from_city).click().perform()
driver.find_element_by_xpath("//div[@data-panel='domesticfrom-flight-hotcity-from']//a[@class='js-hotcitylist' and text()='北京']").click()
driver.implicitly_wait(8)

#设置出发日期-7天后
date = (datetime.datetime.now() + datetime.timedelta(days=7)).strftime("%Y-%m-%d")
# print(date)
from_date.send_keys(Keys.CONTROL + "a")
# js = "document.getElementById('fromDate').value='2019-02-07'" #编写JS语句
# driver.execute_script(js) #执行JS
from_date.send_keys(date)

#搜索
driver.find_element_by_xpath('//*[@id="dfsForm"]/div[4]/button').click()
time.sleep(6)

driver.quit()

执行搜索,会出现一直加载中的情况,不知道为啥,有时候又挺好的

<think>好的,我现在需要帮助用户查找关于Selenium常见面试题,特别是结合Python和pytest的情况。用户之前已经提供了一些引用内容,我需要参考这些引用,并结合之前的回答来生成相关内容。 首先,用户提到的引用[1]中提到了pytest的第三方插件,比如pytest-selenium、pytest-html、pytest-rerunfailures和pytest-xdist,这些可能和面试题相关。用户之前的问题和回答涉及自动化测试框架的实现,所以需要将Selenium与pytest结合使用的常见问题包括进去。 引用[2]详细说明了WebDriver的实现原理,特别是以Firefox为例,解释了启动浏览器和profile的处理。这部分内容可以作为面试题的理论基础,比如WebDriver的工作原理、如何处理浏览器配置等。 引用[3]提到了Selenium+Python面试题目总结,以及一些资源,比如大厂面试真题和技术群的支持。这提示我需要覆盖实际编码问题、框架使用、异常处理等。 接下来,我需要整理常见Selenium面试题,并按照用户要求的结构来组织。用户希望问题分为理论、实战、框架、高级四个部分,每个部分包含多个问题,并给出参考答案。同时,需要结合Python和pytest,例如如何使用pytest插件来增强Selenium测试。 需要注意用户提到的数据驱动测试、Allure报告、环境配置等,这些在之前的回答中也有涉及,可能需要联系起来。比如,如何在Selenium测试中使用pytest的参数化功能,或者如何生成美观的测试报告。 此外,用户可能希望问题不仅涵盖基础,还要有进阶内容,比如如何处理动态元素、Page Object模式、分布式测试等。这些内容在引用中也有提及,如pytest-xdist用于多CPU分发,Page Object模式在最佳实践中提到。 需要确保回答结构清晰,使用Markdown格式,正确使用LaTeX公式(如果有的话),但看起来这里可能更多是代码块和列表。同时,要生成相关问题,放在最后,帮助用户进一步探索。 最后,检查所有引用是否恰当,比如引用[1]关于pytest插件,引用[2]关于WebDriver原理,引用[3]关于面试资源。确保每个参考答案都简洁明了,覆盖关键点,并标注引用来源。</think>### Selenium常见面试题Python+pytest版本) --- #### 一、理论类问题 1. **WebDriver实现原理是什么?** - WebDriver通过浏览器原生支持协议直接控制浏览器,例如启动独立线程管理Firefox实例,支持自定义profile配置[^2] - 核心流程:`脚本命令 -> HTTP请求 -> 浏览器驱动 -> 浏览器执行` 2. **Selenium如何处理动态加载元素?** - 使用显式等待:`WebDriverWait + expected_conditions` ```python from selenium.webdriver.support.ui import WebDriverWait element = WebDriverWait(driver,10).until( EC.presence_of_element_located((By.ID, "dynamicElement")) ) ``` 3. **$xpath$ 和 $css\ selector$ 选择器如何选择?** - $xpath$:支持父子层级、属性定位,复杂场景更灵活 - $css\ selector$:语法简洁、执行效率高,推荐简单定位优先使用 --- #### 二、实战类问题 4. **如何实现浏览器多窗口切换?** ```python # 获取当前窗口句柄 main_window = driver.current_window_handle # 点击打开新窗口 driver.find_element(By.LINK_TEXT, "新窗口").click() # 切换窗口 for handle in driver.window_handles: if handle != main_window: driver.switch_to.window(handle) ``` 5. **如何处理JavaScript弹窗?** ```python alert = driver.switch_to.alert # 获取弹窗对象 alert.accept() # 确认 alert.dismiss() # 取消 alert.send_keys("输入内容") # 输入文本 ``` --- #### 三、框架类问题 6. **pytest如何与Selenium集成?** - 使用`pytest-selenium`插件实现浏览器管理 - 示例配置: ```python # conftest.py @pytest.fixture def browser(request): driver = webdriver.Chrome() request.addfinalizer(driver.quit) return driver ``` 7. **如何实现失败重试机制?** - 使用`pytest-rerunfailures`插件[^1] ```shell pytest --reruns 3 --reruns-delay 2 # 失败重试3次,间隔2秒 ``` --- #### 四、进阶类问题 8. **分布式测试如何实现?** - 使用`pytest-xdist`插件[^1]: ```shell pytest -n 4 # 启动4个worker进程 ``` 9. **如何生成可视化测试报告?** - 结合`allure-pytest`生成报告: ```python @allure.step("验证页面标题") def verify_title(driver, expected): assert driver.title == expected ``` ```shell pytest --alluredir=reports allure serve reports ``` --- ### 高频考点速查表 | 技术点 | 典型问题 | 解决方案 | |----------------------|----------------------------------|----------------------------------| | 元素定位 | 动态元素加载失败 | 显式等待+EC条件判断 | | 测试报告 | 如何展示操作步骤 | Allure添加@step装饰器 | | 并行测试 | 提升执行效率 | pytest-xdist多进程执行 | | 异常处理 | 弹窗中断测试流程 | try-except+异常截图 | --- ### 相关问题 1. 如何通过Selenium实现文件上传操作? 2. Page Object模式在Selenium框架中的具体实现方式? 3. 如何处理SSL证书错误的安全警告?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值