前言:
现时兄弟们对“webdriver获取html源码”大致比较珍视,同学们都需要学习一些“webdriver获取html源码”的相关资讯。那么小编也在网摘上搜集了一些有关“webdriver获取html源码””的相关知识,希望咱们能喜欢,你们一起来了解一下吧!实例1:
(1)控制浏览器操作。
driver.get("")#进入某个网页
driver.set_window_size(480,800) #设置浏览器大小
self.driver.maximize_window()#设置浏览器最大化
driver.back()#模拟浏览器后退操作
drivrt.forward()#模拟浏览器前进操作
driver.refresh()#模拟浏览器刷新操作
driver.close()#关闭浏览器
driver.get_screenshot_as_file("path\\file.png")#获取当前屏幕的截图
(2)基本的API
driver.element.clear()#清空
driver.element.send_keys(value) #输入
driver.element.click()#点击
driver.element.submit()#提交表单,注意element必须为一个表单元素
driver.element.get_attribute("value")#获取元素属性
实例2:百度查询
class checkbaidu(unittest.TestCase):
class checkbaidu(unittest.TestCase):
def setUp(self):
d = drivers()
self.driver=d.driver
self.driver.implicitly_wait(5)
self.driver.get("")
def test_CheckBaidu(self):
inputstring='大数据'
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys(inputstring)
self.driver.find_element_by_id("su").click()
time.sleep(3)
self.assertEqual(self.driver.title,inputstring+"_百度搜索",msg="标题错误")
def tearDown(self):
self.fd.quit(self.driver)
实例3:获取元素属性
对于HTML代码。
<input type="text" name="id" class="wd" maxlength="100">
有以下测试脚本
name=driver.find_element_by_id("id").get_attribute("name")
class=driver.find_element_by_id("id").get_attribute("class")
maxlength driver.find_element_by_id("id").get_attribute("maxlength")
print("name="name)
print("class="class)
print("maxlength="maxlength)
分别获得。
name=id
class=wd
maxlength=100
除了可以通过get_attribute获取元素属性,还可以通过以下几个形式获取。
driver.find_element_by_id("id"). tag_name:获取tag_name。
driver.find_element_by_id("id"). Size:获取元素大小(返回字典类型,类似“{'height': XX, 'width': XX}”)。
driver.find_element_by_id("id"). Text:获取元素中的文字。
def test_CheckInfo (self):
self.driver.get("")
time.sleep(2)
element = self.driver.find_element_by_link_text("新闻")
self.assertEqual(element.tag_name,"a")
self.assertEqual(element.size,{'height': 24, 'width': 26})
self.assertEqual(element.text,"新闻")
另外也可以获取整个网页的属性。
driver.title:获取页面的title值。
driver.page_source:获取页面的HTML源码。
driver.current_url:获取当前页面的url。
(3)输入特殊字符。
通过引入
from selenium.webdriver.common.keys import Keys
包,可以操作键盘特殊字符比如:Control、Alt、空格、F1-F12…
实例4:输入回车键
from selenium.webdriver.common.keys import Keys
…
class checkKey(unittest.TestCase):
def setUp(self):
…
def test_CheckKey (self):
inputstring='大数据'
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys(inputstring)
self.driver.find_element_by_id("kw").send_keys(Keys.RETURN)
time.sleep(3)
self.assertEqual(self.driver.title,inputstring+"_百度搜索",msg="标题错误")
这些特殊字符参见下表
(4)鼠标事件。
引入鼠标操作,首先需要在开始加入如下一行代码。
from selenium.webddiver import ActionChains
鼠标事件的API如下表所示
实例5:百度高级查询
def test_CheckMouse(self):
self.driver.find_element_by_id('kw').send_keys('软件测试')
self.driver.find_element_by_id('su').click()
element = self.driver.find_element_by_name('tj_settingicon')
ActionChains(self.driver).move_to_element(element).perform()
self.driver.find_element_by_link_text('高级搜索').click()
#测试“网页的任何地方”被选中
element = self.driver.find_element_by_id("q5_0")
self.assertTrue(element.is_selected(),"网页的任何地方未被选中!")
(5)等待(显示/隐私/强制等待)。
Selenium3.X等待包括显式等待,隐式等待与强制等待。
显式等待
显式等待的语法如下。
WebDriverWait(driver,timout,pool_frequency=0.5,ignored_exception=None)
其中。
driver:浏览器驱动器。
timeout :最长超时时间。
pool_frequency :检测的间隔(步长)时间,默认0.5秒。
ignored_exception :超时后的异常信息,默认情况抛出NoSuchElementException。
实例6:显式等待页面元素的出现
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
…
element = WebDriverWait(driver,5,0.5).until(
EC.presence_of_element_located((By.ID,"J_LinkBasket")) )
这段代码的意思是:每隔0.5秒检查一下页面中id为"J_LinkBasket"的元素是否加载上来,如果在5秒钟内加载上来继续后续的操作,否则抛出NoSuchElementException。显示等待仅作用于单独的元素。可以通过presence_of_element_located进行定位,也可以通过其他方式进行定位,见下表:
实例7:显式等待标题是否包含特定元素
element = WebDriverWait(self.driver,5,0.5).until(title_contains(("软件测试")))
隐式等待
在本节开始的Selenium测试用例的初始化操作中已经介绍的隐式等待。
语法:
driver.implicitly_wait(int seconds)
与显式等待不同的是,显示等待仅作用于单独的元素,而隐式等待作用于页面所有的元素。当元素在指定的描述内没有加载出来,继续等待,超过则抛出NoSuchElementException。
实例8:隐式等待5秒钟
driver.implicitly_wait(5)
强制等待
理论上Selenium是不允许使用强制等待的,由于Selenium是一个开源框架,在Selenium的显隐式等待上存在着一定的缺陷,甚至有些浏览器不支持Selenium的显隐式等待,所以在程序中不得不仍旧使用强制等待。特别需要指出的是强制等待不是Selenium特有的,使用的是Python语言自带的等待函数。经常使用time类中的sleep方法进行强制等待,格式如下。
import time
…
time.sleep(5)
(6)多表单切换
如果页面中存在着iframe或frame,对表单内的元素进行操作,必须先通过如下命令进入才可以操作。
语法:
driver.switch_to.frame("val")
其中Selenium程序首先找id是否为val的iframe或frame,如果不存在,在找name是否为val的iframe或frame。对于iframe或frame中没有id也没有name的情形,可以通过以下方法来实现。
element=driver.find_element_by_class_name("j_minilogin_iframe")
driver.switch_to.frame(element)
(7)切换新窗口。
尽管切换新窗口代码相对比较长,但是其比较固定,建议将其封装在一个公共类中。
实例9:打开新窗口后不关闭旧窗口
def switch_windows (self,driver,current_windows): #driver为当前驱动,current_windows为切换前的窗口句柄
all_handles = driver.window_handles#获取所有窗口的句柄
for handle in all_handles://遍历所有窗口句柄
if handle != current_windows: #如果遍历句柄不是当前窗口句柄,则为新窗口
driver.switch_to_window(handle) #尝试是否可以进入
break
下面来看一下测试京东查询并进入第一个商品详情页面的测试代码。
实例10:东查询并进入第一个商品详情页面
from util import drivers,util
def setUp(self):
d = drivers()
self.driver=d.driver
self.driver.implicitly_wait(5)
self.driver.get("")
def test_CheckJingdong(self):
Util=util()
self.driver.find_element_by_id("key").clear()#清空查询输入框
self.driver.find_element_by_id("key").send_keys('巧克力') #输入查询内容
self.driver.find_element_by_class_name("button").click()#点击查询按钮
current_windows = self.driver.current_window_handle#获取当前窗口句柄
self.driver.find_element_by_class_name('p-tag').click()#点击第一个查询出来的商品,弹出新窗口
Util.switch_windows(self.driver,current_windows)#切换并且关闭当前窗口
element = WebDriverWait(self.driver,5,0.5).until(EC.presence_of_element_located((By.ID,"key")))#显示等待
self.assertIn"巧克力",self.driver.title,msg="没有找到巧克力")#进行断言
def tearDown(self):
self.driver.quit()
(8)窗口滚动操作。
可以执行JavaScript来实现窗口滚动的功能,但是没有检查点,所以这里没有断言。
实例10:窗口滚动操作
def CheckStroll (self):
inputstring='大数据'
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys(inputstring)
self.driver.find_element_by_id("su").click()
time.sleep(1)
try:
#移动到窗口最下方
self.driver.execute_script("window.scrollTo(100,document.body.scrollHeight);")
time.sleep(3)
#scrollIntoView(true):移动到屏幕中间;scrollIntoView(false):移动到屏幕底部
self.driver.execute_script("document.getElementById('1').scrollIntoView(true);")
time.sleep(3)
#下移400像素
self.driver.execute_script("window.scrollBy(0,400);")
time.sleep(3)
except:
print(traceback.print_exc))
(9)下拉条(Select)操作。
对下拉条进行操作,需要调用Select类:from selenium.webdriver.support.ui import Select。具体操作见下表
实例11:下拉条(Select)操作
对于下面的HTML。
<body>
<form name="form" action="">
<select name="phones" id="ph" multiple> <option value="华为">华为</option>
<option value="三星">三星</option>
<option value="中兴">中兴</option>
<option value="小米">小米</option>
</select><br>
<button onclick="javascript:selectinfo()">选择提示</button>
</form>
</body>
</html>
如下Selenium测试代码。
def test_CheckSelect(self):
self.driver.find_element_by_css_selector('#ph > option:nth-child(4)').click()#通过CSS定位到小米选项,注意这里从1开始,所以是4
#se= self.driver.find_element_by_name('phones') #定位到select
#Select(se).select_by_visible_text('小米'#通过text定位到小米选项
#Select(se).select_by_value('小米') #通过值定位到小米选项
#Select(se).select_by_index(3) #通过索引定位到小米选项,注意这里从0开始,所以是3
self.driver.find_element_by_id('button').click()#点击按钮
text=self.driver.switch_to_alert().text #获取弹窗框里面的文字
self.assertEqual(text,"我选择的是小米") #断言
标签: #webdriver获取html源码