opencv 4快速入门_Selenium快速入门知识4-API实例

本文详细介绍Selenium WebDriver的各种操作技巧,包括浏览器控制、元素交互、特殊字符输入、鼠标事件模拟等。并通过多个实例演示如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7c9679aeac172f0bd2a5c5d08c84ba4a.png

 实例1:

  (1)控制浏览器操作。

  driver.get("http://www.chuansinfo.com/")#进入某个网页

  driver.set_window_size(480,800) #设置浏览器大小

  self.driver.maximize_window()#设置浏览器最大化

  driver.back()#模拟浏览器后退操作

  drivrt.forward()#模拟浏览器前进操作

  driver.refresh()#模拟浏览器刷新操作

  driver.close()#关闭浏览器

  driver.get_screenshot_as_file("pathfile.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("https://www.baidu.com")

  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("https://www.baidu.com")

  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="标题错误")

  这些特殊字符参见下表

16192fff73c92cef3f81c7f44f3e5d71.png

 (4)鼠标事件

  引入鼠标操作,首先需要在开始加入如下一行代码。

  from selenium.webddiver import ActionChains

  鼠标事件的API如下表所示

7867697946ba78c1b3efebe80de0d707.png

  实例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进行定位,也可以通过其他方式进行定位,见下表:

7d674c49ecc9f7f0d971523d8f72e158.png

  实例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("https://www.jd.com/")

  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。具体操作见下表

d9c98fbad3e715650bfe80d6b0267fdc.png

实例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,"我选择的是小米") #断言

下一篇讲给大家介绍:单选按钮(Radio)操作,复选框(CheckBox) 操作....敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值