day36--selenium优化代码

3.4 Selenium API高级

1.多标签之间的切换
场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。     
 1)获取所有窗口的句柄
handles = driver. window_handles         
调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。
2)通过窗口的句柄进入的窗口

driver.switch_to_window(handles[n])         
 driver.switch_to.window(handles[n])
通过窗口句柄激活进入某一窗口
 

 

2.多表单切换     在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
    1)什么是多表单?         实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面

2)处理方法                  直接使用id值切换进表单             driver.switch_to.frame(value)/driver.switch_to_frame(value)         定位到表单元素,再切换进入             el = driver.find_element_by_xxx(value)             driver.switch_to.frame(el)    /driver.switch_to_frame(el)

 

3.鼠标和键盘操作
手动测试时键盘的操作在selenium页有实现,关于鼠标的操作由ActionChains()类来提供,关于键盘的操作由Key()类来提供

1)鼠标操作
导入动作链类,动作链可以储存鼠标的动作         from selenium.webdriver import ActionChains                 获取元素                                                                                                                                el = driver.find_element_by_xxx(value)         context_click(el)       对el执行右击         执行ActionChains中储存的所有动作                        perform()
例如:ActionChains(driver).context_click(ele).perform()     点击鼠标右键                  ActionChains(driver). double_click(ele).perform()            点击鼠标左键            ActionChains(driver).move_to_element(el).perform() 鼠标悬停

3.鼠标和键盘操作
1)键盘操作         键盘操作使用的是Keys类,一般配合send_keys使用
        from selenium.webdriver.common.keys import Keys
* 常用键盘操作
send_keys(Keys.BACK_SPACE)     删除键(BackSpace)                          send_keys(Keys.SPACE)         空格键(Space)                          
send_keys(Keys.TAB)             制表键(Tab)                        
 send_keys(Keys.ESCAPE)         回退键(Esc)                        
 send_keys(Keys.ENTER)         回车键(Enter)                          
send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)

1)键盘操作         * 常用键盘操作

send_keys(Keys.CONTROL,‘a’)     全选(Ctrl+A)                          send_keys(Keys.CONTROL,‘x’)     剪切(Ctrl+X)                          send_keys(Keys.CONTROL,‘v’)     粘贴(Ctrl+V)                        
 send_keys(Keys.F1)             键盘 F1             ……             
send_keys(Keys.F12)             键盘 F12
 

页面格式上下滑动

 ------------------------------------------------------------------------------------------------------

#滚动条操作
from selenium import webdriver
import time
driver=webdriver.Chrome(r"D:\ruanjian\Google\Chrome\Application\chromedriver.exe")
driver.get('https://bj.58.com/')
driver.maximize_window()
driver.implicitly_wait(30)
#设置滑动到坐标
# js="window.scrollTo(0,1500)"
# time.sleep(2)
# driver.execute_script(js)
#设置滑动的坐标
# js="window.scrollTo(0,0)"
# time.sleep(2)
# driver.execute_script(js)
#设置滑动到顶部
# js="var q=document.documentElement.scrollTop=0"
# time.sleep(2)
# driver.execute_script(js)
#设置滑动到底部
# js="window.scrollTo(0,document.body.scrollHeight)"
# driver.execute_script(js)
#设置滑动到指定元素(常用)
cj=driver.find_element_by_xpath('//*[@id="upWrap"]/ul[2]/li[2]/a')
driver.execute_script("arguments[0].scrollIntoView();",cj)
time.sleep(2)
cj.click()

-------------------------------------------------------------------------------------------------------

练习

1:使用游览器登录http://www.baidu.com
2:搜索淘宝官网
3:登录用户名和密码
4:搜索商品(手机,电脑,,,,),给定约束条件(价格,包邮,发货地址。。。)
5:将商品添加到购物车
6:在购物中游览该商品
 7:根据自己的喜好进行下面的操作 

 

 

-------------------------------------------------------------------------------------------------------

from selenium import webdriver
from selenium.webdriver import ActionChains
import unittest
import time
class TestTaoBao(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver=webdriver.Chrome(r"D:\ruanjian\Google\Chrome\Application\chromedriver.exe")
        cls.driver.maximize_window()
        cls.driver.implicitly_wait(30)
    def test001(self):
        driver=self.driver
        driver.get("https://www.taobao.com/")
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="login"]/div[1]/i').click()
        time.sleep(20)
        self.assertEqual("淘宝网 - 淘!我喜欢",driver.title)
    def test002(self):
        driver=self.driver
        driver.find_element_by_xpath('//*[@id="q"]').send_keys("vans")
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
        time.sleep(2)
        jg=driver.find_element_by_xpath('//*[@id="J_relative"]/div[1]/div/ul/li[4]/div/div')
        ActionChains(driver).move_to_element(jg).perform()
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="J_relative"]/div[1]/div/ul/li[4]/ul/li[2]/a').click()
        time.sleep(2)
        sp=driver.find_element_by_xpath('//*[@id="J_Itemlist_Pic_652515110732"]')
        driver.execute_script("arguments[0].scrollIntoView();",sp)
        time.sleep(2)
        sp.click()
        driver.switch_to.window(self.driver.window_handles[1])
        self.assertEqual("VANS/范斯 X FEAR OF GOD ERA 95 DX灯芯绒 黑白半印限量联名板鞋-淘宝网",driver.title)
    def test003(self):
        driver=self.driver
        driver.find_element_by_xpath('//*[@id="J_juValid"]/div[2]/a').click()
        time.sleep(10)
        driver.find_element_by_xpath('//*[@id="J_ResultSummary"]/div[4]/a[2]').click()
        time.sleep(10)
        driver.find_element_by_xpath('//*[@id="J_Item_3722916034952"]/ul/li[1]/div/div/div/label').click()
        time.sleep(10)
        driver.find_element_by_xpath('//*[@id="J_FloatBar"]/div[2]/div[2]/a[1]').click()
        time.sleep(10)
        driver.switch_to.alert.accept()
    @classmethod
    def tearDownClass(cls) -> None:
        time.sleep(5)
        cls.driver.quit()
if __name__ == '__main__':
    unittest.main()

-------------------------------------------------------------------------------------------------------

 58同城

 

 ------------------------------------------------------------------------------------------------------

from selenium import webdriver
import time
import unittest
class Test58Tongcheng(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver=webdriver.Chrome(r"D:\ruanjian\Google\Chrome\Application\chromedriver.exe")
        cls.driver.maximize_window()
        cls.driver.implicitly_wait(30)
    def test001(self):
        driver=self.driver
        driver.get("https://bj.58.com/")
        driver.find_element_by_xpath('/html/body/div[3]/div[1]/div[1]/div/div[1]/div[1]/span[1]/a').click()
        driver.switch_to.window(self.driver.window_handles[1])
        self.assertEqual("北京出租房价格信息|房价租金|北京房产网-北京58同城租房网",driver.title)
    def test002(self):
        driver=self.driver
        driver.find_element_by_xpath('/html/body/div[5]/div[2]/div[2]/dl[1]/dd/a[4]').click()
        time.sleep(2)
        driver.find_element_by_xpath('/html/body/div[5]/div[2]/div[2]/dl[1]/dd/div/a[3]').click()
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="secitem-rent"]/dd/span/span[1]/input').send_keys(1000)
        driver.find_element_by_xpath('//*[@id="secitem-rent"]/dd/span/span[3]/input').send_keys(5000)
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="secitem-rent"]/dd/span/span[5]/a').click()
        time.sleep(2)
        driver.find_element_by_xpath('//*[@id="nav-container"]/ul/li[3]/a').click()
        driver.switch_to.window(self.driver.window_handles[2])
        self.assertEqual("北京房产网,北京房产信息网,北京楼盘网,北京新房,2022年北京新开楼盘_北京58爱房",driver.title)
    @classmethod
    def tearDownClass(cls) -> None:
        time.sleep(5)
        cls.driver.quit()
if __name__ == '__main__':
        unittest.main()

-------------------------------------------------------------------------------------------------------

生成58同城测试报告

from HTMLTestRunner import HTMLTestRunner
import unittest
from 优化代码58同城 import Test58Tongcheng
suite=unittest.TestSuite()
list=["test001","test002"]
for list_name in list:
    suite.addTest(Test58Tongcheng(list_name))
with open("../report.html","wb") as f:
    HTMLTestRunner( stream=f,
                    title="58同城测试报告",
                    description="第一期",
                    verbosity=2 ).run(suite)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值