2. 基础的脚本使用(主要是定位)

一、从selenium包中导入webdriver:
from selenium import webdriver

  

 
二、创建一个Firefox浏览器驱动实例:
driver = webdriver.Firefox()

  

 
三、访问应用程序:
driver.get('https://www.baidu.com')
获取本地应用程序(下列应用程序和py文件在一个目录下):
filepath = 'file:///' + os.path.abspath('文件名')
driver.get(filepath)

  

四、隐式等待
driver.implicitly_wait(30) # 等待30秒
""" 
    1. implicitly_wait():隐式等待;
    2. 当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常;
    3. 换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0;
    4.  一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢;
    5. 它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。 
"""

  

五、浏览器最大化
driver.maximize_window()

  

 
六、休眠
import time
time.sleep(0.3) # 休眠0.3秒
"""
time.sleep() 函数随意插,哪里太快插哪里,再也不用担心看不清脚本的运行过程了。
其实,这个函数的真正用途不是给我们看脚本的运行过程的,有时候网络原因,或页面加载慢。假设搜索框输入框输入了selenium ,搜索按钮还没加载出来,那么脚本就报错。在适当的位置加入time.sleep()有助于减少网络原因造成的脚本执行失败;
"""
 
七、 元素定位和操作
1. name
find_element_by_name('name');
<input name = 'name_value' \>
search_field = driver.find_element_by_name('name_value')
search_field.clear() # 如果文本框已经有值的话,则清空
search_field.send_keys('自动化') # 输入新的特定的值
search_field.submit() # 提交搜索请求

  

2. xpath
复数
find_elements_by_xpath('//tag[@class/name="class_value/name_value"]');
"""
找到一系列标签名为tag,其class='class_value'或name='name_value'的内容;
"""
<a href="#" target="_blank">first</a>
<a href="#" target="_blank">second</a>
products = driver.find_elements_by_xpath("//a[@target='_blank']")
find_elements_by_xpath('//tag1[@class/name="class_value/name_value"]/tag2');
"""
获取路径是以标签tag2结尾的所有内容列表;
"""

  

单数
find_element_by_xpath('//tag[@id="id_value"]');
 
xpath:attributer (属性) driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium") #input标签下id =kw的元素 xpath:idRelative (id相关性)

driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium") #在/form/span/input 层级标签下有个div标签的id=fm的元素 driver.find_element_by_xpath("//tr[@id='check']/td[2]").click() # id为'check' 的tr ,定闪他里面的第2个td xpath:position (位置) driver.find_element_by_xpath("//input").send_keys("selenium") driver.find_element_by_xpath("//tr[7]/td[2]").click() #第7个tr 里面的第2个td xpath: href (水平参考) driver.find_element_by_xpath("//a[contains(text(),'网页')]").click() #在a标签下有个文本(text)包含(contains)'网页' 的元素 xpath:link driver.find_element_by_xpath("//a[@href='http://www.baidu.com/']").click() #有个叫a的标签,他有个链接href='http://www.baidu.com/ 的元素

  

通过属性定位元素:
find_element_by_xpath("//标签名[@属性='属性值']")
id属性:
find_element_by_xpath("//input[@id='kw']")
class属性:
find_element_by_xpath("//input[@class='s_ipt']")
name属性:
find_element_by_xpath("//input[@name='wd']")
maxlength属性:
find_element_by_xpath("//input[@maxlength='255']")

  

通过标签名定位元素:
指所有input标签元素
find_element_by_xpath("//input")
父子定位元素:
查找有父亲元素的标签名为span,它的所有标签名叫input的子元素
find_element_by_xpath("//span/input") 
driver.find_element_by_xpath("//div[@class='header_nav']/ul/li/p[contains(text(),'首页')]")
"""
<div class='header_nav'>
    <ul>
        <li>
            <p>
                首页
            </p>
        </li>
    </ul>
</div>
"""                

  

根据元素内容定位元素(非常实用):
find_element_by_xpath("//p[contains(text(),'京公网')]") 
"""
<p id="jgwab"> <i class="c-icon-jgwablogo"></i> 京公网安备11000002000001号 </p>
"""
注:contains的另一种用法 //input[contains(@class,'s')] 说明class属性包含s的元素。
组合定位元素: //父元素标签名/标签名的属性值:指的是span下的input标签下class属性为s_ipt的元素 find_element_by_xpath("//span/input[@class='s_ipt']")
多个属性组合定位(挺常用的) 指的是input标签下id属性为kw且name属性为wd的元素 find_element_by_xpath("//input[@class='s_ipt' and @name='wd']")
指的是p标签下内容包含“京公网”且id属性为jgwab的元素 find_element_by_xpath("//p[contains(text(),'京公网') and @id='jgwab']")

  

  
3. css
id:
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">
driver.find_element_by_css_selector('#kw').send_keys('大角虫')
name: <a href="http://news.baidu.com" name="tj_news">新 闻</a> driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()
title: <a οnclick="queryTab(this);" mon="col=502&pn=0" title="web" href="http://www.baidu.com/">网页</a> driver.find_element_by_css_selector("a[title=\"web\"]").click()
class: <a class="RecycleBin xz" href="javascript:void(0);"> driver.find_element_by_css_selector("a.RecycleBin").click()

 

八、 WebDriverWait(driver, 10) 
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver,10).until(
lambda the_driver:
the_driver.find_element_by_xpath('//div[@class="sug-result"]').is_displayed()
)
# 10秒内每隔500毫秒扫描1次页面变化,当出现指定的元素后结束。driver就不解释了,前面操作webdriver.firefox()的句柄;

  

九、 isdisabled()判断元素是否出现
WebDriverWait(driver,10).until(
lambda the_driver:
the_driver.find_element_by_xpath('//div[@class="sug-result"]').is_displayed()
)
# 该元素是否用户可以见;
 
十、 class ActionChains(driver)
webdriver.ActionChains(driver).move_to_element(menu).perform()
driver: 执行用户操作实例webdriver 
生成用户的行为。所有的行动都存储在actionchains对象。通过perform()存储的行为。
 
十一、 move_to_element(menu)
webdriver.ActionChains(driver).move_to_element(menu).perform()
移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素
to_element:元件移动到;
 
十二、 perform()
webdriver.ActionChains(driver).move_to_element(menu).perform()
执行所有存储的行为;
 
十三、 获取弹窗alert
driver.switch_to.alert

  

十四、 获取窗口
还有switch_to.window()
 
十五、 截图
中文路径和文件名的解决办法:在路径之前要加上u
其他截图方法:
 
十六、 判断元素是否存在
is_displayed函数只能用于该元素存在去判断此元素是否出现,而不能判断某个元素是否存在,需要自定义判断元素是否存在;
 
十七、 获取元素属性
driver.find_element_by_id('kw').get_attribute('maxlength/class/value/id/width/type/name……')

  

十八、 不打开浏览器的测试
# 不打开浏览器的测试
option = webdriver.ChromeOptions()
option.add_argument("headless")
# headless:在Chrome在headless模式下运行;
# disable-gpu:作用是针对现有bug的work around;
# remote-debugging-port=9222:作用则是允许我们可以在另外一个浏览器中debug;
# option.add_argument('--headless')
# option.add_argument('--disable-gpu')
# option.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(chrome_options=option, executable_path='E:\program\Python37\Scripts\chromedriver-2.43.exe')

  

十九、 正则表达式:匹配

转载于:https://www.cnblogs.com/noobzeng/p/10905299.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值