python, selenium 基础

本文介绍Selenium自动化测试工具的基本使用方法,包括多种元素定位方式、常见操作技巧及等待策略等,适合初学者快速上手。

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

1.selenium定位方式,条件:必须是唯一的,如果不知道怎么写,可以右键copy xpath ,这样就会copy出一个 xpath形式的定位代码

find_element_by_id('kw')

find_element_by_name()

find_element_by_class_name()

find_element_by_tag_name()

find_element_by_link_text()

find_element_by_partial_link_text()

find_element_by_xpath()

find_element_by_css_selector()

2. 通过xpath定位方式:

find_element_by_xpath("//*[@id='kw' ") 或者find_element_by_xpath("//input[@id='kw' ")    #两个//表示某一个标签,*表示任意标签名, 等同于 find_element_by_id('kw')

find_element_by_xpath("//input[@name='wd' ")     #两个//表示某一个标签,*表示任意标签名, 等同于 find_element_by_name('wd')

find_element_by_xpath("//input[@class='s_ipt' ")

find_element_by_xpath("//a[text(), '新闻']")                      #等同于find_element_by_link_text('新闻'), partial_link_text:可以用 find_element_by_xpath("//a[contains(@name, 'hao123')]")  

find_element_by_xpath("//input[@autocomplete='off' ")

find_element_by_xpath("//form/span[@class='aaa']/input[2]")

find_element_by_xpath("/html/body/div/div[2]/")

find_element_by_xpath("//form[@id='form' and name='f' and class='fm']/span[2]/input[2]")

3. css_selector定位方式:

find_element_by_css_selector("#kw")   # 等于id

find_element_by_css_selector("[name='wd']")

find_element_by_css_selector(".s_ipt")  # . 等于class

find_element_by_css_selector("span.s_ipt >input >")  # >表示层级关系

4. selenium定位的时候,如百度首页的设置,这种是需要鼠标悬停的,可以用 ActionChains 方法(from selenium.webdriver.common.action_chains import ActionChains), 下拉列表可以用Select方法(from selenium.webdriver.support.select import Select), 当点保存后会有一个提示框(警告框等),可以用Alert(from selenium.webdriver.common.alert import Alert), 语法如下:

setting=dr.find_element_by_link_text("设置")
ActionChains(dr).move_to_element(setting).perform()

selectitem=dr.find_element_by_id("nr")
Select(selectitem).select_by_value('20')

alert=dr.switch_to_alert()
print(alert.text)
alert.accept()

5. 如果定位的时候感觉对但是怎么也定位不到,需要研究一下是不是有嵌套表单,如https://mail.qq.com, 需要多表单的切换:

dr.switch_to_frame('login_frame')   # switch_to_frame('') 这里可以是id也可以是name

如果点击后弹出一个新的窗口,这时需要切换窗口,涉及到句柄handle:switch_to_window(),具体用法如下:

handle=dr.current_window_handle #获取当前的窗口句柄

handles=dr.window_handles  #获取所有的窗口句柄

for handle in handles:
    if handle!=handle1:
        dr.switch_to_window(handle)
        dr.find_element_by_id('nickname').send_keys("aaa")

   dr.close()  #关掉一个窗口

6. 几个方法:set_window_size(400,600), getattribute(type), is_displayed()

7. 几种等待方法:

显式等待:from selenium.webdriver.support import expected_conditions as EC

element=WebDriverWait(driver, 5, 0.5).until (

EC.presence_of_element_located((By.ID, 'kw'))

)

隐式等待:只需要加一行:dr.implicitly_wait(5)在程序的开头

8.单元测试框架(unittest, pytest), web开发框架(django, falsk)

9. 验证码怎么破?

10. 怎么样读取csv文件:

import csv
datas=csv.reader(open('./testData/user_info.csv', 'r'))
for data in datas:
if data[0]=='username':
continue
print(data[0])
print(data[1])

 11.怎么样读取txt文件:

f=open('./testData/user_info.txt','r')
info=f.readlines()
f.close()
for i in range(0,2):
a=info[i].split(';')
username=a[0]
password=a[1]
b=Login(dr)
b.login126(username,password)

12. 怎么样读取xml文件:

 

13.unittest 特点:

a. 创建的类必须继续unittest.TestCase

b. 创建的方法必须以test开头

c. 断言方法为self.assertEqual(result, 8)

d. 执行测试在if __name__=='__main__'里用unittest.main()

e. setUp(self), tearDown(self)方法来执行每一条测试的开始要做的和最后要做的操作

f. 测试套件:suit=unittest.TestSuite()          suit.addTest(类名(‘方法名'))

g.测试运行器:runner=unittest.TextTestRunner()   runner.run(suit)

h.discover方法:可以指定哪些文件来执行, suit=unittest.defaultTestLoader.discover("start_dir='xxx', pattern='test*.py')

i. 可以用一些装饰器,比如@unittest.skip("skip')    @unittest.skipIf(3>2, 'if true skip') @unittest.skipUnless(3>2, 'if true执行'), @unittest.unexpectedFailure

j. fixture 除了每条case的setUp, tearDown,还有类和module的setUpClass(cls), tearDownClass(cls),setUpModule(), tearDownModule() 方法前需要用@classmethon来装饰

 14. pytest:

  • 测试文件以test_开头(以_test结尾也可以)pytest will run all files of the form test_*.py or *_test.py in the current directory and its subdirectories. More generally, it follows standard test discovery rules.
  • 测试类以Test开头,并且不能带有 __init__ 方法
  • 测试函数以test_开头
  • 断言使用基本的assert即可
  • 支持参数化, 如下可以用pytest.mark.parametrize, 或者pytest.fixture

 

转载于:https://www.cnblogs.com/tongbaomami/p/9141319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值