WebDriver浏览器属性
在WebDriver的测试框架中,WebDriver的类里面提供了很多的方法来专门针对浏览器的操作,这些方法都是在WebDriver
的类里面,如测试被测试的浏览器地址,获取被测试的浏览器名称。
一、获取测试的地址(current_url)
在测试中,由于实际的需求,我们需要获取被测试的地址,比如我说一个很具体的业务场景,验证用户登录一个系统成功后,怎么判断该用户是登录成功了呢?判断的依据可以分为两种来进行解答:一种是用户登录成功后显示的用户昵称,来获取它的文本信息,来验证昵称是否是自己期望的,另外一种方式是获取登录成功后的地址,然后使用endswith()的方法来验证是不是以XX地址为结尾作为判断的依据,当然endswith()的方法返回的结果是bool的数据类型,如果是希望的地址,返回的结果True,如果不是那么返回的结果就是False。下面就简单的验证下百度的首页地址信息,测试的案例代码如下:
from selenium import webdriver driver=webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com')
#使用endswith()的方法来验证是不是以XX地址为结尾作为判断的依据返回值为bool类型 assert str(driver.current_url).endswith('baidu.com/') driver.quit()
#在如上的过程中,我们使用了Python原生的断言assert,其实Pytest测试框架使用的就是该原生的方法来进行验证结果的信息。
二、获取当前页面代码(page_source方法)
获取当前页面源码的方式与在浏览器邮件查看源代码获取的信息是一致的,其实很多的时候获取页面的源代码并没有太大的意义,但是在网络爬虫里面获取页面的源代码进行下一步的数据分析。当然,在本案例中,只是单纯的获取页面的源代码的部分,使用到的方法为page_source,该方法为特性方法,
那么何为特性方法?所谓特性方法可以简单的理解为它是类里面的一个方法但是该方法它是属于只读属性,所以所有的特性方法在调用的时候都是没有()的,这点其实很好的理解,如果一个方法有了形式参数,那么在这个方法调用的时候必然需要给这个方法的形式参数赋予实际的参数,但是特性方法是调用的时候没有(),那么也就无法给形式参数赋值,这点需要特别的注意,特性方法使用到的装饰器为@property。page_source方法实战的具体测试代码如下:
from selenium import webdriver driver=webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com') print(driver.page_source) driver.quit()
三、获取当前的Title
获取浏览器的title其实很简单的,比如百度的title它就是“百度一下,你就知道”,那么下面针对这部分进行具体的验证,案例测试代码如下所示:
from selenium import webdriver driver=webdriver.Chrome()
#窗口最大化 driver.maximize_window() driver.get('http://www.baidu.com') assert driver.title=='百度一下,你就知道' #断言 driver.quit()
四、页面的前进和后退
页面的前进使用到的方法为forward(),后面的后退使用到的方法为back(),这主要应用于很多的业务场景,比如在第一次打开的是百度,后面由于测试的需求,打开的是bing搜索页面,那么可以回退回去,当然也可以再次前进到bing搜索的页面,下面具体演示这部分的测试代码,具体如下:
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com') t.sleep(2) driver.get('http://www.bing.com') driver.back()#后退 print('获取到百度的地址:',driver.current_url) driver.forward()#前进 print('获取到bing的地址:',driver.current_url) driver.quit()
五、多窗口的实战
先来说一个很简单的场景,在sina的邮箱中,如果需要登录,但是没有账户,那么就需要注册,这个时候就需要点击注册的按钮,就会打开一个新的页面到注册的页面,并不会说直接跳转到注册的页面,这个时候由于需要操作注册的页面,就需要实现从当前页面切换到另外一个新的页面,那么这个时候就需要使用到多窗口的操作和实战。其实多窗口更多指的是两个窗口,如果是2个以上的窗口,是很难判断的,因为缺少判断的基准,多窗口的解决步骤可以具体的描述为:
-
先获取当前窗口句柄
-
然后点击链接,打开一个新的窗口句柄
-
然后获取到所有的窗口句柄
-
循环所有的窗口句柄,判断如果不是当前窗口句柄,那么就切换到新的窗口句柄(如果当前的,就只能是新的窗口了)
-
切换到新的窗口后,进行操作完成后,然后关闭新的窗口,再切换到当前窗口句柄
下面就以sina的邮箱为案例来演示这部分,比如注册页面被注册的邮箱为空的错误提示信息,案例测试代码如下:
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('https://mail.sina.com.cn/') #获取当前窗口句柄 nowHandler=driver.current_window_handle t.sleep(3) driver.find_element_by_link_text('注册').click() t.sleep(3) #获取所有窗口句柄 allHandler=driver.window_handles #进行循环判断 for handle in allHandler: #判断不是当前窗口句柄 if handle!=nowHandler: #切换到新的窗口 driver.switch_to.window(handle) t.sleep(3) driver.find_element_by_link_text('立即注册').click() errorText=driver.find_element_by_xpath('/html/body/div[2]/div/div/div/div/form[1]/div[2]/ul/li[1]/div[3]/p/abbr').text assert errorText=='请输入邮箱名' driver.close() #切换到当前窗口 driver.switch_to.window(nowHandler) t.sleep(3) driver.quit()