自动化测试-下拉菜单网页测试(selenium)

问题描述

目标网页:https://www.lagou.com/zhaopin/ 完成重庆市计算机行业工作的查找,月薪5k-10k 要求调用到的方法: 1.下拉菜单的选择; 2.xpath定位

#没有在这里下的selenium 在本地下的 所以这里运行不起来
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver import ActionChains
from selenium.webdriver.support import expected_conditions as EC

dr0=webdriver.Firefox()
dr0.get("https://passport.lagou.com/login/login.html?msg=validation&uStatus=2&clientIp=106.85.76.98&u=2")
dr0.maximize_window()  # 最大化窗口
sleep(3)  # 等待3秒


# login=dr.find_element(By.CSS_SELECTOR,".login").click()
# sleep(3)
# passlogin=dr.find_element(By.CSS_SELECTOR,"div.sc-fotOHu:nth-child(2) > div:nth-child(3) > div:nth-child(1)").click()
# sleep(3)
#输入您的用户名和密码
username = dr0.find_element(By.CSS_SELECTOR, ".iEUASn")
username.send_keys("15023060812")
password = dr0.find_element(By.CSS_SELECTOR, ".kwdeWU")
password.send_keys("OYyh20021112@")
sleep(3)
agree=dr0.find_element(By.CSS_SELECTOR,".sc-furwcr")
agree.click()
sleep(3)
# 单击登录按钮
login_button = dr0.find_element(By.CSS_SELECTOR, ".ant-btn-primary")
login_button.click()
sleep(30)



#登录了怎么跳转页面继续测试
# dr=webdriver.Firefox()
# dr.get(dr0.current_url)
# dr0.maximize_window()  # 最大化窗口
# sleep(3)  # 等待3秒

search1=dr0.find_element(By.CSS_SELECTOR,"#search_input")
#
actions = ActionChains(dr0)
actions.move_to_element(search1).click().perform()
#search.click()#单击
search1.clear()  # 清空
# search1.send_keys("重庆")  # 输入

# #dr.find_element(By.XPATH, "//*[@id='jobsContainer']/div[1]/div/div[2]/button").click()  # 单击搜索按钮
#dr0.find_element(By.XPATH, "//*[@id='search_button']").click()
element = dr0.find_element_by_css_selector("#search_button")
dr0.execute_script("arguments[0].click();", element)
# dr.find_element(By.CSS_SELECTOR, ".search-btn__1ilgU").click()
sleep(30)
#下拉菜单(cq
# 模拟鼠标点击事件
# 找到页面元素
element1=dr0.find_element_by_xpath('//*[@id="chosen"]')
# # 实例化
actions = ActionChains(dr0)
actions.move_to_element(element1).click().perform()
dr0.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[2]/div[1]/div[1]/div[1]/div[2]/div[3]/div[1]').click()
sleep(30)

#下拉菜单(salary
# 模拟鼠标点击事件
# 找到页面元素
element2 = WebDriverWait(dr0, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[@class='hover-container__l0i_a']//span[text()='薪资要求']"))
)
# element2=dr0.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[3]/div')
# # 实例化
actions1 = ActionChains(dr0)
actions1.move_to_element(element2).perform()
sleep(5)
# dr0.find_element_by_xpath("//div[@class='hover-container__l0i_a']/div/ul[2]/li[3]").click()
# 设置最大等待时间为 10 秒
wait = WebDriverWait(dr0, 15)
# 等待元素变为可见状态
option = wait.until(EC.visibility_of_element_located((By.XPATH, '//span[text()="5k-10k"]')))
# option = dr0.find_element_by_xpath('//span[text()="5k-10k"]')
actions3 = ActionChains(dr0)
actions3.move_to_element(option).click().perform()
# option = dr0.find_element_by_xpath('//span[text()="5k-10k"]')
# dr0.execute_script("arguments[0].scrollIntoView();", option)
# option.click()
# dr0.find_element_by_xpath('//span[text()="5k-10k"]').click()
sleep(20)

#下拉菜单(细分方向
# 模拟鼠标点击事件
# 找到页面元素
element3 = WebDriverWait(dr0, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[@class='hover-container__l0i_a']//span[text()='细分方向']"))
)
# element3=dr0.find_element_by_xpath('/html/body/div/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[8]/div')
# # 实例化
actions2 = ActionChains(dr0)
actions2.move_to_element(element3).perform()
sleep(5)
# element0 = dr0.find_element_by_xpath('//span[text()="C++"]')
# actions4 = ActionChains(dr0)
# actions4.move_to_element(element0).click().perform()
# 设置最大等待时间为 10 秒
wait = WebDriverWait(dr0, 15)
# 等待元素变为可见状态
option1 = wait.until(EC.visibility_of_element_located((By.XPATH, '//span[text()="C++"]')))
actions4 = ActionChains(dr0)
actions4.move_to_element(option1).click().perform()
# option1 = dr0.find_element_by_xpath('//span[text()="C++"]')
# dr0.execute_script("arguments[0].scrollIntoView();", option1)
# option1.click()

# dr0.find_element_by_xpath('//div[@class="hover-container__l0i_a"]/div/ul[2]/li[3]').click()
sleep(30)

dr0.quit()

测试过程与测试结果

启动驱动(网站是该网站的登录界面开始,不然一直会跳转到登陆界面)

dr0=webdriver.Firefox()
dr0.get("https://passport.lagou.com/login/login.html?msg=validation&uStatus=2&clientIp=106.85.76.98&u=2")
dr0.maximize_window()  # 最大化窗口
sleep(3)  # 等待3秒

自动登录账号(登录后需等待sleep 把跳转后的页面加载出来)(这是我自己注册过的账号

#输入用户名和密码
username = dr0.find_element(By.CSS_SELECTOR, ".iEUASn")
username.send_keys("这里填自己的账号")
password = dr0.find_element(By.CSS_SELECTOR, ".kwdeWU")
password.send_keys("这里填自己的密码")
sleep(3)
#同意按钮点击
agree=dr0.find_element(By.CSS_SELECTOR,".sc-furwcr")
agree.click()
sleep(3)
#单击登录按钮
login_button = dr0.find_element(By.CSS_SELECTOR, ".ant-btn-primary")
login_button.click()
sleep(30)

这是跳转后的界面(无需要的下拉框) 

跳转后的页面操作

1. 点击搜索框 ,并点击搜索按钮(跳转到有需要的下拉框界面)

search1=dr0.find_element(By.CSS_SELECTOR,"#search_input")
#
actions = ActionChains(dr0)
actions.move_to_element(search1).click().perform()
#search.click()#单击
search1.clear()  # 清空
# search1.send_keys("重庆")  # 输入

# #dr.find_element(By.XPATH, "//*[@id='jobsContainer']/div[1]/div/div[2]/button").click()  # 单击搜索按钮
#dr0.find_element(By.XPATH, "//*[@id='search_button']").click()
element = dr0.find_element_by_css_selector("#search_button")
dr0.execute_script("arguments[0].click();", element)

 这是跳转后的界面

2. 对下拉框(选城市(更多))进行处理

#下拉菜单(cq
# 模拟鼠标点击事件
# 找到页面元素
element1=dr0.find_element_by_xpath('//*[@id="chosen"]')
# # 实例化
actions = ActionChains(dr0)
actions.move_to_element(element1).click().perform()
dr0.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[2]/div[1]/div[1]/div[1]/div[2]/div[3]/div[1]').click()
sleep(30)

这是跳转后的界面

3. 对下拉框(薪资要求)进行处理

#下拉菜单(salary
# 模拟鼠标点击事件
# 找到页面元素
element2 = WebDriverWait(dr0, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[@class='hover-container__l0i_a']//span[text()='薪资要求']"))
)
# element2=dr0.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[3]/div')
# # 实例化
actions1 = ActionChains(dr0)
actions1.move_to_element(element2).perform()
sleep(5)
# dr0.find_element_by_xpath("//div[@class='hover-container__l0i_a']/div/ul[2]/li[3]").click()
# 设置最大等待时间为 15 秒
wait = WebDriverWait(dr0, 15)
# 等待元素变为可见状态
option = wait.until(EC.visibility_of_element_located((By.XPATH, '//span[text()="5k-10k"]')))
# option = dr0.find_element_by_xpath('//span[text()="5k-10k"]')
actions3 = ActionChains(dr0)
actions3.move_to_element(option).click().perform()
# option = dr0.find_element_by_xpath('//span[text()="5k-10k"]')
# dr0.execute_script("arguments[0].scrollIntoView();", option)
# option.click()
# dr0.find_element_by_xpath('//span[text()="5k-10k"]').click()
sleep(20)

 

4. 对下拉框(细分方向)进行处理【我注册时要填的内容已经确定了 所以我换成查找C++的】

#下拉菜单(细分方向
# 模拟鼠标点击事件
# 找到页面元素
element3 = WebDriverWait(dr0, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[@class='hover-container__l0i_a']//span[text()='细分方向']"))
)
# element3=dr0.find_element_by_xpath('/html/body/div/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[8]/div')
# # 实例化
actions2 = ActionChains(dr0)
actions2.move_to_element(element3).perform()
sleep(5)
# element0 = dr0.find_element_by_xpath('//span[text()="C++"]')
# actions4 = ActionChains(dr0)
# actions4.move_to_element(element0).click().perform()
# 设置最大等待时间为 10 秒
wait = WebDriverWait(dr0, 15)
# 等待元素变为可见状态
option1 = wait.until(EC.visibility_of_element_located((By.XPATH, '//span[text()="C++"]')))
actions4 = ActionChains(dr0)
actions4.move_to_element(option1).click().perform()
# option1 = dr0.find_element_by_xpath('//span[text()="C++"]')
# dr0.execute_script("arguments[0].scrollIntoView();", option1)
# option1.click()

# dr0.find_element_by_xpath('//div[@class="hover-container__l0i_a"]/div/ul[2]/li[3]').click()
sleep(30)

测试成功 

总结/对注释掉的代码的解释

1.网络问题

TimeoutException 错误,意味着在指定的最大等待时间内,指定的条件未能得到满足。这可能是由于页面加载速度较慢、网络延迟或元素根本不存在等原因造成的。可以尝试增加最大等待时间。

解决方法

1. 使用 Selenium 的显式等待来等待元素变为可见状态----》有用

# 设置最大等待时间为 15 秒
wait = WebDriverWait(dr0, 15)

2. 换网络【换自己的手机热点】---》有用

2.元素问题

ElementNotInteractableException 错误,意味着 Selenium 无法与页面上的元素进行交互。

解决方法

1. 使用 find_element() 和 ActionChains 类来模拟鼠标点击事件,以展开下拉菜单并选择选项。----》有用

option1 = wait.until(EC.visibility_of_element_located((By.XPATH, '//span[text()="C++"]')))
actions4 = ActionChains(dr0)
actions4.move_to_element(option1).click().perform()

2. 使用 JavaScript 来将元素滚动到视图中,然后再尝试与它进行交互。

# option1 = dr0.find_element_by_xpath('//span[text()="C++"]')
# dr0.execute_script("arguments[0].scrollIntoView();", option1)
# option1.click()

3.路径xpath问题

NoSuchElementException错误,意味着 Selenium 无法找到指定的元素。可能是由于页面结构发生了变化,或者提供的 XPath 表达式不正确,或者页面上的元素是动态加载的,那么您可能需要在查找元素之前等待一段时间,以确保元素已经加载完成

解决方法

1. 检查表达式 ---》有用

检查后发现:绝对路径一直在改变

# 使用绝对路径 并检查后发现有问题 便注释掉了
# element2=dr0.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[3]/div[1]/div[1]/div[2]/div/ul/li[3]/div')

2. 使用相对路径 ---》有用

EC.presence_of_element_located((By.XPATH, "//div[@class='hover-container__l0i_a']//span[text()='薪资要求']"))

3. 加长等待时间

element2 = WebDriverWait(dr0, 10).until(
    EC.presence_of_element_located((By.XPATH, "//div[@class='hover-container__l0i_a']//span[text()='薪资要求']"))
)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Selenium是一个用于Web应用程序自动化测试的开源框架。它支持多种编程语言,包括Java、Python、C#等,并提供了丰富的API,可以用于模拟用户在浏览器上的各种操作,如点击、输入、选择等。通过Selenium,开发人员可以快速、准确地测试Web应用程序的功能和性能,帮助他们提高开发效率和代码质量。同时,Selenium还提供了一些高级功能,如分布式测试、并行测试等,能够满足不同场景下的测试需求。 ### 回答2: Selenium是一个广泛使用的自动化测试框架,用于测试Web应用程序的功能和用户界面。它是一个免费的开源工具,支持多种编程语言,包括Java、Python和C#等。 Selenium的主要特点是它可以模拟真实用户的行为,通过自动化脚本来执行各种测试任务,例如点击按钮、填写表单、选择下拉菜单和验证页面元素等。 Selenium采用客户端-服务器体系结构,其中客户端通过WebDriver API与浏览器进行通信,服务器则负责将命令传递给浏览器并返回结果。 Selenium支持各种浏览器,包括Chrome、Firefox、Safari和Internet Explorer等。它可以在不同的操作系统上运行,例如Windows、Linux和Mac OS。 Selenium还提供了丰富的工具和附加组件,可帮助测试人员更好地管理和执行测试任务。例如,Selenium IDE用于记录和回放测试用例,Selenium Grid用于并行执行测试Selenium WebDriver用于编写自动化测试脚本。 与其他自动化测试框架相比,Selenium具有许多优势。首先,它是一个跨平台的工具,可以在不同的环境中进行测试。其次,Selenium提供了丰富的API和功能,以支持各种测试任务。最重要的是,由于Selenium是一个开源项目,因此用户可以根据自己的需求定制和扩展框架,并从庞大的用户社区中获得支持和帮助。 尽管Selenium自动化测试领域已经取得了巨大的成功,但它也面临一些挑战。首先,与其他自动化测试工具一样,Selenium测试人员的技能要求较高,需要有一定的编程和脚本开发经验。其次,由于Web应用程序的不断更新和改进,需要及时更新和维护测试脚本,以确保其准确性和可靠性。 总的来说,Selenium是一个功能强大、灵活可扩展的自动化测试框架,可以帮助测试人员提高测试效率和质量,并实现持续集成和交付。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊小滑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值