随笔 - 30  文章 - 1  评论 - 0  阅读 - 2998

WebDriver浏览器属性,WebElement类方法实战,Select类实战

WebDriver浏览器属性

获取当前的测试地址

在测试中,由于实际的需求,我们需要获取被测试的地址,比如我说一个很具体的业务场景,验证用户登录一个系统成功后,怎么判断该用户是登录成功了呢?那么判断的依据可以分为两种来进行解答,一种是用户登录成功后显示的用户昵称,来获取它的文本信息,来验证昵称是否是自己期望的,另外一种方式是获取登录成功后的地址,然后使用current_url来获取访问的地址,来验证是否为百度的地址

复制代码
from selenium  import  webdriver


driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
#获取当前的测试地址
print(driver.current_url)
driver.close()
复制代码

获取当前的页面源码

该方法为特性方法,

特性方法可以简单的理解为它是类里面的一个方法但是该方法它是属于只读属性,所以所有的特性方法在调用的时候都是没有()的

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')
#获取title
print(driver.title)
driver.close()
复制代码

页面的前进和回退

页面的前进使用到的方法为forward(),后面的后退使用到的方法为back(),这主要应用于很多的业务场景,比如在第一次打开的是百度,后面由于测试的需求,打开的是bing搜索页面,那么可以回退回去,当然也可以再次前进到bing搜索的页面,下面具体演示这部分的测试代码,具体如下

复制代码
import time
from selenium import webdriver

driver=webdriver.Chrome()
#窗口最大化
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)
driver.get('http://www.bing.com')
time.sleep(1)
#回退
driver.back()
print(driver.current_url)
time.sleep(1)
#前进
driver.forward()
print(driver.current_url)
time.sleep(1)
driver.close()
复制代码

窗口最大化

把页面窗口化变为全屏显示

driver.maximize_window()

多窗口的实战

先来说一个很简单的场景,在sina的邮箱中,如果需要登录,但是没有账户,那么就需要注册,这个时候就需要点击注册的按钮,就会打开一个新的页面到注册的页面,并不会说直接跳转到注册的页面,这个时候由于需要操作注册的页面,就需要实现从当前页面切换到另外一个新的页面,那么这个时候就需要使用到多窗口的操作和实战。其实坦白说,多窗口更多值的是两个窗口,如果是2个以上的窗口,是很难判断的,因为缺少判断的基准,多窗口的解决步骤可以具体的描述为:

  • 先获取当前窗口句柄

  • 然后点击链接,打开一个新的窗口句柄

  • 然后获取到所有的窗口句柄

  • 循环所有的窗口句柄,判断如果不是当前窗口句柄,那么就切换到新的窗口句柄(如果当前的,就只能是新的窗口了)

  • 切换到新的窗口后,进行操作完成后,然后关闭新的窗口,再切换到当前窗口句柄

以百度新闻为例

复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
#窗口最大化
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)
#获取当前的窗口
nowHeadler=driver.current_window_handle
driver.find_element(By.LINK_TEXT,'新闻').click()
time.sleep(2)
#获取所有的窗口
allHeadlers=driver.window_handles
#对所有的窗口进行循环和判断
for hander in allHeadlers:
    #判断是不是当前窗口
    if hander!=nowHeadler:
        #切换到新的窗口
        driver.switch_to.window(hander)
        time.sleep(1)
        driver.find_element(By.ID,'ww').send_keys('百度新闻')
        time.sleep(1)
        driver.close()
#切换到当前窗口
driver.switch_to.window(nowHeadler)
time.sleep(1)
driver.find_element(By.ID,'kw').send_keys('我回来了')
time.sleep(1)
driver.close()
复制代码

WebElement类方法实战

清空clear()

clear()的方法是清空的意思,也就说在一个文本输入框里面输入关键字的信息后,调用该方法可以清空里面的具体信息。下面还是通过具体的案例实战代码来演示下

复制代码
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)
so=driver.find_element(By.ID,'kw')
so.send_keys('admin')
time.sleep(2)
so.clear()
driver.close()
复制代码

get_attribute()

get_attribute()的方法是获取元素属性的值,比如我们可以获取文本输入框里面的友好提示信息

复制代码
import time

from selenium import webdriver
from selenium.webdriver.common.by import By


driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)
so=driver.find_element(By.ID,'kw')
so.send_keys('admin')
time.sleep(2)
#获取属性的值
print(so.get_attribute('value'))
print(so.get_attribute('maxlength'))
driver.close()
复制代码

is_displayed()

凡事一个方法带is的基本返回的结果都是bool的数据类型,那么它的结果如果是为真的,返回的结果就是True,如果结果是假的,返回的结果就是False。比如在百度的首页“关于百度”是否可见,我们可以调用该方法

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)
obj=driver.find_element(By.LINK_TEXT,'关于百度')
print(obj.is_displayed())
driver.close()
复制代码

is_enabled()

readonly属性,添加这个属性后文本框则不能输入

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('http://www.baidu.com')
time.sleep(1)
obj=driver.find_element(By.ID,'kw')
print(obj.is_enabled())
driver.close()
复制代码

is_selected()

该方法返回的结果信息是是否可选中,使用的场景主要为在登录的案例中,一般记住登录都是默认选中的

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://mail.sina.com.cn')
time.sleep(1)
obj=driver.find_element(By.ID,'store1') ///定位到自动登录的勾选框
print(obj.is_selected())
time.sleep(2)
obj.click()     ///点击取消自动登录
time.sleep(1)
print(obj.is_selected())
time.sleep(2)
driver.close()
复制代码

Select类实战

元素定位的方式步骤具体为:

  • 首先获取下拉框的属性,当然这些属性可以是id,name以及xpath的信息

  • 拿到下拉框属性的对象,然后实例化Select的类

  • 下来调用该类里面的方法来获取下拉框选项里面的具体内容

在Select的类里面,针对获取下拉框选项里面的内容,使用到的方法主要是索引方式,和文本信息以及text的方式。

下拉框定位实战

针对如上的,下面通过三种的方式来定位下拉框的内容,具体涉及到的方法以及案例实战的代码具体在

如下会详细的演示它的应用。

select_by_index()

select_by_index()的方法是通过索引的方式,如我们在上面的交互中,我们想选择下拉框中的Go

语言,它是在第三位,那么它的索引就是2,因为索引是从0开始,下面的代码案例主要是以索引的方式

来进行定位的

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/85425/Desktop/select(1).html')
time.sleep(1)
sel=driver.find_element(By.ID,'nr')
obj=Select(sel)
time.sleep(1)
#索引模式
obj.select_by_index(2)
time.sleep(2)
driver.close()
复制代码

select_by_value()

select_by_value()方法是通过value的方式来进行定位,也就是标签中option里面的value属性来进行定位

比如我们还是Go语言,那么它的value的值就是“Go”

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/85425/Desktop/select(1).html')
time.sleep(1)
sel=driver.find_element(By.ID,'nr')
obj=Select(sel)
time.sleep(1)
#value值模式
obj.select_by_value('Go')
time.sleep(2)
driver.close()
复制代码

select_by_text()

select_by_text()的方法是通过文本信息来定位的,比如下拉框还是想选择Go,那么它的文本信息其实就

是“Go语言”

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select

driver=webdriver.Chrome()
driver.maximize_window()
driver.get('file:///C:/Users/85425/Desktop/select(1).html')
time.sleep(1)
sel=driver.find_element(By.ID,'nr')
obj=Select(sel)
time.sleep(1)
#文本模式
obj.select_by_visible_text('Go语言')
time.sleep(2)
driver.close()
复制代码

案例实战

  • 先定位到“工作性质”后,然后点击

  • 然后再选择下拉框中需要选择的项,定位到后进行点击,就能够定位到了

下面使用具体的代码来演示下这部分的案例实战应用,涉及到的代码为:

复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

'''对于不标准的select怎么办'''
driver=webdriver.Chrome()
driver.maximize_window()
driver.get('https://www.lagou.com/')
time.sleep(5)
#输入关键字
driver.find_element(By.ID,'search_input').send_keys('测试开发工程师')
time.sleep(2)
driver.find_element(By.ID,'search_button').click()
time.sleep(3)
#点击学历要求
driver.find_element(By.XPATH,'//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[2]/div/span').click()
time.sleep(3)
#选择大专
driver.find_element(By.XPATH,'//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[2]/div/div/ul[2]/li[1]/span').click()
time.sleep(5)
driver.close()
复制代码

 

posted on   xiaobia1  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示