龙空技术网

Selenium快速入门知识4-API实例

川石信息 147

前言:

现时兄弟们对“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源码