1. 处理button group
# -*- coding:utf-8 -*-
"""
@author:百草Lily
@file:deal_path.py
@time:2021/4/27
"""
from time import sleep
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from common.deal_path import get_url
"""
处理button group
场景:button group即按钮组,将一组按钮排列在一起。处理这种对象的思路一般是先找到button group的包裹(wrapper)div,
然后通过层级定位,用index或属性去定位更具体的按钮
<div class="btn-group">
<div class="btn">first</div>
<div class="btn">second</div>
<div class="btn">third</div>
</div>
"""
driver = Chrome()
driver.implicitly_wait(10)
driver.get(get_url("button_group.html"))
# 定位第2个按钮
buttons_ele = (By.CLASS_NAME, "btn")
buttons = driver.find_elements(*buttons_ele)
WebDriverWait(driver, 5, 0.5).until(
EC.visibility_of_element_located(buttons_ele)
)
for btn in buttons:
if btn.text == "second":
print("find second button!")
btn.click()
print(btn)
sleep(2)
driver.quit()
# error1:
# btn.click()
# selenium.common.exceptions.UnexpectedAlertPresentException: Alert Text: second
# Message: unexpected alert open: {Alert text : second}
# why? 点击打开alter窗
2. 处理 button dropdown
"""
处理button dropdown
场景:button dropdown就是把按钮和下拉菜单弄到一起。
处理这种对象的思路一般是:先点击这个按钮,等待下拉菜单显示出来,然后使用层级定位方法来获取下拉菜单中的具体项
<div class="btn-group open">
<a class="btn dropdown-toggle btn-info" data-toggle="dropdown" href="#">
Info
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
<li><a href="#">watir-webdriver</a></li>
<li><a href="#">better than</a></li>
<li><a href="#">selenium-webdriver</a></li>
</ul>
</div>
"""
driver = Chrome()
driver.implicitly_wait(10)
driver.get(get_url("button_dropdown.html"))
try:
# 点击按钮
driver.find_element(By.CLASS_NAME, "btn-group").click()
locator = (By.CLASS_NAME, "dropdown-menu1")
# 方式1:EC
# WebDriverWait(driver, 5, 0.5).until(
# EC.visibility_of_element_located(locator)
# )
# 方式2:轮询默认0.5s;lambda函数
WebDriverWait(driver, 10).until(
lambda the_driver: the_driver.find_element_by_class_name('dropdown-menu').is_displayed()
)
driver.find_element(*locator).click()
time.sleep(2)
driver.quit()
except Exception as e:
killtask()
print(e)
3. 定位navs
"""
处理navs
场景:navs类似tab的导航栏。一般来说导航栏都是ul+li.先定位ul再去定位li中的link即可
<ul class="nav nav-pills">
<li class="active">
<a href="#">Home</a>
</li>
<li>
<a href="#">Content</a>
</li>
<li>
<a href="#">About</a>
</li>
</ul>
"""
driver = Chrome()
driver.get(get_url("navs.html"))
driver.find_element(By.CLASS_NAME, "nav-pills").find_element(By.LINK_TEXT, "Content1").click()
driver.quit()
4. 处理面包屑
面包屑,即页面上的路径展示
"""
处理breadcrumb
场景:获取其层级关系,以及当前的层级
一般来说,当前层级都不会是链接,而父级则基本以链接
所以处理面包屑,需找到所在div或url,然后通过该div或url找到下面所有的链接就是父层级
最后不是链接的部分就应该是当前层级了
<div class="span3">
<ul class="breadcrumb">
<li><a href="#">Home</a> <span class="divider">/</span></li>
<li><a href="#">Library</a> <span class="divider">/</span></li>
<li class="active">Data</li>
</ul>
</div>
"""
driver = Chrome()
driver.implicitly_wait(10)
driver.get(get_url("breadcrumb.html"))
ancestors = driver.find_element(By.CLASS_NAME, "breadcrumb").find_elements(By.TAG_NAME, "a")
for ancestor in ancestors:
print(ancestor)
time.sleep(2)
driver.quit()
# 输出结果:
# <selenium.webdriver.remote.webelement.WebElement (session="30b8583e70629f200ba37ea03953c35d", element="12000bff-3f3e-4d54-b0d8-bbd7cf9f2bdf")>
# <selenium.webdriver.remote.webelement.WebElement (session="30b8583e70629f200ba37ea03953c35d", element="fccf1dcc-d070-4c6c-93d9-e35adb4586a8")>
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。