10周了.2周宝宝便秘是什么样子

沪ICP备3-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd关注51Testing
编写自动化测试代码—Selenium自动化测试指南(11)
发表于: 11:19 &作者:赵卓 & 来源:51Testing软件测试网
推荐标签:
  程序清单7-3 Selenium 1 Java代码
package Project1;import com.thoughtworks.selenium.*; //注意这里导入了selenium包中的内容public class Project1Class {public static void main(String[] args) throws InterruptedException {DefaultSelenium selenium = new DefaultSelenium("localhost", 4444, "*iexplore", );selenium.start();selenium.open("/new/login.aspx");System.out.println("检查是否成功进入用户登录页面:" + "/new/login.aspx".equals(selenium.getLocation()));//第2步selenium.click("link=找回密码");selenium.waitForPageToLoad("30000");System.out.println("检查页面是否跳转到/findPwd/index.action:" + "/findPwd/index.action".equals(selenium.getLocation()));//第3步selenium.goBack();Thread.sleep(2000);selenium.type("id=loginname", "");selenium.click("id=loginsubmit");Thread.sleep(2000);System.out.println("弹出提示“请输入用户名/邮箱/已验证手机”:" + selenium.isTextPresent("请输入用户名/邮箱/已验证手机"));//第4步selenium.type("id=loginname", "erroruser1");selenium.click("id=loginsubmit");Thread.sleep(2000);System.out.println("弹出提示“请输入密码”:" + selenium.isTextPresent("请输入密码"));//第5步selenium.type("id=loginpwd", "errorpwd1");selenium.click("id=loginsubmit");Thread.sleep(2000);System.out.println("弹出提示“您输入的账户名不存在,请核对后重新输入”:" + selenium. isTextPresent("您输入的账户名不存在,请核对后重新输入"));//第6步selenium.type("id=loginname", "注:这里输入正确的用户名");selenium.type("id=loginpwd", "注:这里输入正确的密码");selenium.click("id=loginsubmit");selenium.waitForPageToLoad("30000");Thread.sleep(2000);System.out.println("成功登录并跳转到首页,操作栏上出现“您好,xxxx”字样:" + "您好,realzhao![退出]".equals(selenium.getText("id=loginbar")));selenium.stop();}}
  程序清单7-4& Selenium 2 C#代码
using Susing OpenQA.Susing OpenQA.Selenium.Fusing System.Tnamespace ConsoleApplication3{class Program{static void Main(string[] args){IWebDriver driver = new FirefoxDriver();//第1步driver.Navigate().GoToUrl(/new/login.aspx);Thread.Sleep(2000);Console.WriteLine("检查是否成功进入用户登录页面:{0}", "https://passport. 360buy. com/new/login.aspx" == driver.Url);//第2步driver.FindElement(By.LinkText("找回密码")).Click();Thread.Sleep(2000);Console.WriteLine("检查页面是否跳转到/findPwd/index.action:{0}", "/ findPwd/index. action" == driver.Url);//第3步driver.Navigate().Back();driver.FindElement(By.Id("loginname")).Clear();driver.FindElement(By.Id("loginname")).SendKeys("");driver.FindElement(By.Id("loginsubmit")).Click();Thread.Sleep(2000);Console.WriteLine("弹出提示“请输入用户名/邮箱/已验证手机”:{0}", driver.FindElement (By.CssSelector("BODY")).Text.Contains("请输入用户名/邮箱/已验证手机"));//第4步driver.FindElement(By.Id("loginname")).Clear();driver.FindElement(By.Id("loginname")).SendKeys("erroruser1");driver.FindElement(By.Id("loginsubmit")).Click();Thread.Sleep(2000);Console.WriteLine("弹出提示“请输入密码”:{0}", driver.FindElement(By.CssSelector("BODY")).Text.Contains("请输入密码"));//第5步driver.FindElement(By.Id("loginpwd")).Clear();driver.FindElement(By.Id("loginpwd")).SendKeys("errorpwd1");driver.FindElement(By.Id("loginsubmit")).Click();Thread.Sleep(2000);Console.WriteLine("弹出提示“您输入的账户名不存在,请核对后重新输入”:{0}", driver. FindElement(By.CssSelector("BODY")).Text.Contains("您输入的账户名不存在,请核对后重新输入"));//第6步driver.FindElement(By.Id("loginname")).Clear();driver.FindElement(By.Id("loginname")).SendKeys("注:这里输入正确的用户名");driver.FindElement(By.Id("loginpwd")).Clear();driver.FindElement(By.Id("loginpwd")).SendKeys("注:这里输入正确的密码");driver.FindElement(By.Id("loginsubmit")).Click();Thread.Sleep(9000);Console.WriteLine("成功登录并跳转到首页,操作栏上出现“您好,xxxx”字样:{0}", "您好,realzhao![退出]" ==& driver.FindElement(By.Id("loginbar")).Text);driver.Quit();Console.ReadKey();}}}
搜索风云榜
( 10:51:34)
这里看看就行了,书嘛凑字数太严重了,鄙视作者出版社和51testing
( 15:22:27)
不好意思哈!老师:您的《编写自动化测试代码—Selenium自动化测试指南(11)》第五页的【程序清单7-8&&Selenium 1 C#代码】是不是应该改写成【程序清单7-8&&Selenium 1 java代码】
51Testing官方微信
51Testing官方微博
测试知识全知道\ Selenium+Java自动化测试常用的方法
Selenium+Java自动化测试常用的方法
分享即可 +1积分
软件测试工程师
任何时候都别怕重来,每个看似低的起点,都是通往高峰的必经之路。你不努力,谁又能替你成长?
作者的热门手记
1.设置等待时间
Thread.sleep(2000); (1000代表1s)
2.断言assertion:
验证应用程序的状态是否同所期望的一致。
常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选。
断言被用于三种模式: assert 、verify、waitfor
Assert 失败时,该测试将终止。
Verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上。
Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试。
如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超时时间。 一般跟setTimeout时间一起用
断言常用的有:
assertLocation(判断当前是在正确的页面)、
assertTitle(检查当前页面的title是否正确)、
assertValue(检查input的值, checkbox或radio,有值为”on”无为”off”)、
assertSelected(检查select的下拉菜单中选中是否正确)、
assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
assertText(检查指定元素的文本)、
assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、
assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、
assertAttribute(检查当前指定元素的属性的值)、
assertTable(检查table里的某个cell中的值)、
assertEditable(检查指定的input是否可以编辑)、
assertNotEditable(检查指定的input是否不可以编辑)、
assertAlert(检查是否有产生带指定message的alert对话框)、
waitForElementPresent (等待检验某元素的存在。为真时,则执行。)
最常用的unittest断言如下:
1.相等断言:assertEqual(self, first, second, msg=None)  常用于title和url的对比来检查是否与预期结果一致;
 self.assertEqual(u'用户 - Delicate Cloud Dashboard', driver.title, 'switch to Admin_Identity_User panel fail')
2.不等断言:assertNotEqual(self, first, second, msg=None)  与1相反,此断言不常用;
3.True断言:assertTrue(self, expr, msg=None)     此断言可用于对寻找某元素的表达式进行判断,如返回True则通过,否则Fail;
4.False断言:assertFalse(self, expr, msg=None)    此断言可用于对寻找某元素的表达式进行判断,如返回False则通过,否则Fail;
3和4可以配合使用selenium IDE所生成的Python脚本中is_element_present和is_alert_present来使用;
selenium元素的定位以及操作
元素的定位
自动化,我们需要做的最基本的事情就是在页面找到元素并通过脚本程
序去操作这个元素,实现模拟人工操作。我们有多种定位元素的方式可以选择:
通过元素的
ID定位元素:
findElement(By.id(element));
通过元素的名称定位元素:
findElement(By.name(element));
通过元素的html中的位置定位元素:
findElement(By.xpath(element));
通过元素的标签名称定位元素:
findElement(By.tagName(element));
通过元素的链接名称定位元素:
findElement(By.linkText(element));
通过元素的类名定位元素:
findElement(By.className(element));
通过元素的css定位元素:
findElement(By.cssSelector(element));
通过元素的部分链接名称定位元素:
findElement(By.partialLinkText(element));
元素的操作
不同的元素我们进行不同的操作,按钮的点击、输入框的字符输入、或者是元素的内
容获取,不同的元素我们操作的方式不一。
对ID为element的元素进行点击操作:
driver.findElement(By.id(element)).click();
对ID为element的元素进行发送字符操作:
driver.findElement(By.id(element)).sendKeys(“XXXXXX”);
这里只举用的最多且最简单的的两例元素的操作,
还有的是先获取元素后,再单独操作
WebElement text1 = driver.findElement(By.name(&password&));
text1.sendKeys(&123456&);
3.页面操作
模拟鼠标点击:driver.click();
打开网页:driver.get(&&);
关闭网页:driver.close();
在输入框中输入内容:text.sendKeys(“”);
清空输入框中的内容:text.clear();
获取输入框中的内容:text.getText();
选择下拉框中的元素:
Select select = new Select(wd.findElement(By.id(&select&)));
切换到某个frame:
driver.switchTo().frame(&&);
从一个frame切换到另一个frame:
driver.switchTo().frame(&&);
切换到某个window:
driver.switchTo().window(&windowName&);
返回父iframe:(一般在跳转frame之前都写上这个语句)
driver.switchTo().defaultContent();
刷新页面:driver.navigate().refresh();
页面前进后退:
driver.navigate().forward();
driver.navigate().back();
悬停鼠标:
1.5.1输入框(text field or textarea)WebElement element = driver.findElement(By.id(&passwd-id&));
* element.sendKeys(“test”);//在输入框中输入内容:
* element.clear();    
//将输入框清空
* element.getText();  
//获取输入框的文本内容:
1.5.2下拉选择框(Select)Select select = new Select(driver.findElement(By.id(&select&)));
* select.selectByVisibleText(“A”);
* select.selectByValue(“1”);
* select.deselectAll();
* select.deselectByValue(“1”);
* select.deselectByVisibleText(“A”);
* select.getAllSelectedOptions();
* select.getFirstSelectedOption();
1.5.3单选项(Radio Button)WebElement radio=driver.findElement(By.id(&BookMode&));
* radio.click();    
//选择某个单选项
* radio.clear();    
//清空某个单选项
* radio.isSelected();  //判断某个单选项是否已经被选择
1.5.4多选项(checkbox)WebElement checkbox = driver.findElement(By.id(&myCheckbox.&));
* checkbox.click();
* checkbox.clear();
* checkbox.isSelected();
* checkbox.isEnabled();
1.5.5按钮(button)WebElement btn= driver.findElement(By.id(&save&));
* btn.click();      //点击按钮
* btn.isEnabled ();  //判断按钮是否enable
1.5.7弹出对话框(Popup dialogs)Alert alert = driver.switchTo().alert();
* alert.accept();  //确定
* alert.dismiss();  //取消
* alert.getText(); //获取文本
1.5.8表单(Form)  Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
  WebElement approve = driver.findElement(By.id(&approve&));
  approve.click();
  approve.submit();//只适合于表单的提交
1.5.9上传文件上传文件的元素操作:
  WebElement adFileUpload =driver.findElement(By.id(&WAP-upload&));
  String filePath = &C:\test\uploadfile\media_ads\test.jpg&;
  adFileUpload.sendKeys(filePath);
Windows 和 Frames之间的切换
driver.switchTo().defaultContent();     //返回到最顶层的frame/iframe
driver.switchTo().frame(&leftFrame&);    //切换到某个frame:
driver.switchTo().window(&windowName&); //切换到某个window
调用Java ScriptWeb driver对Java Script的调用是通过JavascriptExecutor来实现的,例如:
JavascriptExecutor js = (JavascriptExecutor)
js.executeScript(&JS脚本&);
超时设置 WebDriver driver = new FirefoxDriver();
* driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);    
//识别元素时的超时时间
* driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);  //页面加载时的超时时间
* driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);  //异步脚本的超时时间
相关标签:
分享即可 +1积分
请登录后,发表评论
评论(Enter+Ctrl)
评论加载中...
评论加载中...
Copyright (C)
All Rights Reserved | 京ICP备 号-2  关键词:XUnit、Selenium2、数据驱动,自动化测试程序
  作者:顾翔
  啄木鸟软件测试咨询网
  摘要:XUnit是单元测试框架体系。Selenium2又称第二代Selenium,即WebDriver+Selenium1,支持Python、Java等多种语言。数据驱动在自动化测试中扮演了重要的角色。本文以Python语言来进行详细介绍,最后给一个Java的案例。
  1、XUnit介绍
  首先我们先来介绍一下XUnit,XUnit是各种代码驱动测试框架的统称,这些框架可以测试软件的不同内容(单元),比如函数和类。XUnit框架的主要优点是,它提供了一个自动化测试的解决方案。没有必要多次编写重复的测试代码,也不必记住这个测试的结果应该是怎样的。XUnit的测试框架体系见图一。
  图一 XUnit的测试框架体系
  接下来我们介绍一下JUnit的四要素:
  1,测试Fixtures:是一组认定被测对象或被测程序单元测试成功的预定条件或预期结果的设定。Fixture就是被测试的目标,可能是一个对象或一组相关的对象,甚至是一个函数。测试人员在测试前就应该清楚对被测对象进行测试的正确结果是什么,这样就可以对测试结果有一个明确的判断。
  2,测试集:测试集就是一组测试用例,这些测试用例要求有相同的测试Fixture,以保证这些测试不会出现管理上的混乱。
  3,测试执行:单个单元测试的执行可以按下面的方式进行:
  setUp();/*首先,我们要建立针对被测程序单元的独立测试环境*/
  /*然后,编写所有测试用例的测试体或测试程序*/
  tearDown();/*最后,无论测试成功还是失败,都将环境进行清理,以免影响后继的测试*/
  4,断言:断言实际上就是验证被测程序在测试中的行为或状态的一个宏或函数。断言失败实际上就是引发异常,终止测试的执行。
  XUnit测试流程是:
  1, 对Fixture 进行初始化,以及其他初始化操作;
  2, 按照要测试的某个功能或流程对Fixture 进行操作;;
  3, 验证结果是否正确;
  4, 对Fixture的以及其他的资源释放等做清理工作。
  XUnit支持多种语言,比如Junit(支持Java语言),NUnit(支持.NET语言),CPPUnit(支持C++语言),unittest(支持Python语言)等,下面我们来看一段unittest框架用来测试Python程序的代码:
  #!/usr/bin/env python
  #coding:utf-8
  import unittest
  from Calculator import calculator
  class calculatortest(unittest.TestCase):
  def setUp(self):
  print "Test start!"
  def test_base(self):
  j=calculator(4,2)
  self.assertEqual(j.myadd(),6)
  self.assertEqual(j.mysubs(),2)
  self.assertEqual(j.mymultiply(),8)
  self.assertEqual(j.mydivide(),2)
  def test_subs(self):
  mydata = [[4,2,2],[2,4,-2],[4,-4,0]]
  for i in mydata:
  j=calculator(mydata[n][0],mydata[n][1])
  self.assertEqual(j.mysubs(),mydata[n][2])
  def test_multiply(self):
  mydata = [[4,2,8],[4,-2,-8],[-4,2,-8],[-4,-2,8]]
  for i in mydata:
  j=calculator(mydata[n][0],mydata[n][1])
  self.assertEqual(j.mymultiply(),mydata[n][2])
  def tearDown(self):
  print "Test end!"
  if __name__=='__main__':
  #构造测试集
  suite=unittest.TestSuite()
  suite.addTest(calculatortest("test_base"))
  suite.addTest(calculatortest("test_subs"))
  suite.addTest(calculatortest("test_multiply"))
  #运行测试集合
  runner=unittest.TextTestRunner()
  runner.run(suite)
  显然这是一个测试加、减、乘、除四则运算程序的测试代码。
  1,import unittest引入unittest测试包。
  2,from Calculator import calculator 引入被测对象。
  3,class calculatortest(unittest.TestCase):建立测试类。
  4,def setUp(self):
  print "Test start!"
  初始化测试用例程序,在这里只需要打印一个"Test start!"的字符串。
  5,def test_base(self):
  开始书写每一个测试函数。
  6,def tearDown(self):
  print "Test end!"
  结束测试用例程序,在这里只需要打印一个"Test end!"的字符串。
  7,if __name__=='__main__':
  这一段为定义主函数。
  2、Selenium2介绍
  接下来我们介绍Selenium2,根据百度百科介绍:Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性――测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能――创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。下面是一段利用python书写的Selenium2测试代码。
  #!/usr/bin/env python
  #coding:utf-8
  from selenium import webdriver
  from selenium.webdriver.support.ui import WebDriverWait
  from mon.by import By
  from mon.keys import Keys
  from selenium.webdriver.support.ui import Select
  mon.exceptions import NoSuchElementException
  import unittest,time,re,os,time
  from mon.desired_capabilities import DesiredCapabilities
  from selenium.webdriver.support import expected_conditions as EC
  brower =""
  def checkbrowser(brower):
  if brower=="IE":
  driver = webdriver.Ie()
  return driver
  if brower=="firefox":
  driver = webdriver.Firefox()
  return driver
  def printlog(functionname,result):
  if(result):
  print "The testcase of "+functionname+" is Pass!"
  print "The testcase of "+functionname+" is not Pass!"
  #判断body里面文字是否存在
  def isTextPresent(what):
  mytext=driver.find_element_by_tag_name("body").text
  if what in mytext:
  print "body里不存在"+what
  return True
  return False
  def CheckBaidu(driver,inputString):
  driver.get("")
  driver.find_element_by_id("kw").clear()
  driver.find_element_by_id("kw").send_keys(inputString)
  driver.find_element_by_id("su").click()
  if driver.title==inputString+unicode('_百度搜索',encoding='utf-8'):
  print "The Result page Title is error"
  result=False
  result=True
  time.sleep(5)
  printlog("CheckBaidu()",result)
  def Check3testing(driver,checktext,menu):
  driver.get("")
  driver.switch_to.default_content()
  driver.switch_to.frame("head")
  driver.find_element_by_partial_link_text(menu).click()
  driver.switch_to.default_content()
  if isTextPresent(unicode('checktext',encoding='utf-8')):
  result=False
  result=True
  time.sleep(5)
  printlog("Check3testing()",result)
  def Checktaobao(driver):
  driver.get("https:/")
  driver.find_element_by_id("q").send_keys(unicode('巧克力',encoding='utf-8'))
  driver.find_element_by_class_name("btn-search").click()
  time.sleep(5)
  #当前窗口
  current_windows = driver.current_window_handle
  driver.find_element_by_class_name('J_ClickStat').click()
  time.sleep(10)
  all_handles = driver.window_handles
  for handle in all_handles:
  if handle != current_windows:
  driver.switch_to.window(handle)
  time.sleep(10)
  element = WebDriverWait(driver,5,0.5).until(
  EC.presence_of_element_located((By.ID,"J_LinkBasket"))
  element.click()
  time.sleep(5)
  element=driver.find_element_by_class_name("j_minilogin_iframe")
  driver.switch_to.frame(element)
  driver.find_element_by_class_name("J_Quick2Static").click()
  driver.find_element_by_id("TPL_username_1").send_keys("")
  driver.find_element_by_id("TPL_password_1").send_keys("syz541522")
  driver.find_element_by_class_name("J_Submit").click()
  result=True
  if __name__=="__main__":
  driver=checkbrowser("firefox")
  driver.implicitly_wait(10)
  CheckBaidu(driver,unicode('测试',encoding='utf-8'))
  Check3testing(driver,unicode('顾翔',encoding='utf-8'),unicode('我的介绍',encoding='utf-8'))
  Checktaobao(driver)
  driver.quit()
  3、用unittest结合Selenium2来设置测试程序
  受限微信2000字,更多内容请点击原文阅读。
声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。2.自动化测试之python+selenium基础
时间: 00:25:57
&&&& 阅读:463
&&&& 评论:
&&&& 收藏:0
标签:元素的定位& &&浏览器控制& &&鼠标事件& & &&键盘事件& &&获取验证设置等待& & &&sleep休眠& &&定位一组元素 &&多表单切换& 多窗口切换& &&& &警告框处理& &&上传文件 & & &下载文件& &&& cookies操作 javascript调用截图& &&& & &&关闭窗口& &&& 验证码处理一、元素的定位1.webdriver提供的8种页面元素定位方法:& & id/name/class name/tag name/link text/partial link text/xpath/css selector& & 其中python对应的8种方法:& & find_element_by_id()& &&& &&& &&& &&& &&& &如:&find_element_by_id("kw")&&& & find_element_by_name()& &&& &&& &&& &&& &&&如:&find_element_by_name("wd")& & find_element_by_class_name() & & & & & & &&如:&find_element_by_class_name("s_ipt")&& & find_element_by_tag_name()& & & & & & & & &如:&find_element_by_tag_name("input")&& & find_element_by_link_text()& & & & & & & & 如:find_element_by_link_text(u"新闻")& &&& & find_element_by_partial_link_text()& & & &&如:find_element_by_partial_link_text(u"一个很长的")&& & find_element_by_xpath()& &&& &&& &&& &&& &&如:&find_element_by_xpath("&.//*[@id=‘kw‘]")&&& & find_element_by_css_selector()& &&& & && &&如:&find_element_by_css_selector("#kw")& & 注意:& & a.python对中文支持不好,在对于有中文的地方加小写u,作用是把中文字符串转换成unicode编码,如上面link_text(u"新闻")&&& & b.xpath中如果不想指定标签名,也可用(*)代替,2.xpath定位:& & 2.1 绝对路径定位:find_element_by_xpath("/html/body/div/div[2]/div/form/span/input")&& & 2.2 利用元素属性定位:find_element_by_xpath("//*/input[@id=‘kw‘]")& &&&&& &&& &&& &&& &&//表示当前目录 && & 2.3 层级与属性结合:find_element_by_xpath("//span[@class=‘bg s_pt‘]/input")&& && &&&/input表示父元素下的子元素& &&& &&& &&& &&& &&& & 可以用这种方法,一层层网上,直到最外层&html&标签& & 2.4 使用逻辑运算符:find_element_by_xpath("//input[@id=‘kw‘ and @class=‘su‘]/span/input")3.css定位& &&& & 速度快于xpath& &&css常见语法:& &&& &&& &&& &&& & 例如:& &&& &&通过.class定位的:& find_element_by_css_selector(".intr")& &&& & 通过#id定位的:& && find_element_by_css_selector("#firstname")& &&& & 通过标签名定位的:& find_element_by_css_selector("input")& &&& & 通过父子关系定位的:find_element_by_css_selector("div&input")& &&& & 通过属性定位:& &&& find_element_by_css_selector("input[type=‘submit‘]")& &&& & 组合定位:& &&& &&& find_element_by_css_selector(span.bg s_ipt&input.s_ipt) && &&& &&& &&& &&& &&& &&& &&& && &&& &&& &&&//父标签span对应class属性为bg s_ipt的节点下的子标签input且这个子标签class属性为s_ipt& &二、浏览器控制& & 1.控制浏览器大小:set_window_size()& & 例如:driver.set_window_size(400,500)& &&& &&& &&& &&& &&& maximize_window()& & 例如:driver.maximize_window() &#无参数& & 2.浏览器后退、前进:back()-后退、farward()-前进三、鼠标事件& &&ActionChains类提供的常用方法:& &&& & 1.1 perform():执行ActionChains中存储的所有行为,对整个事件进行提交& &&& & 1.2 context_click():& & 右击& &&& &&如:& &&& &&& &from&mon.action_chains&import&ActionChains& &&& &&& &&& &&...& &&&& &&& ActionChains(dr).context_click(docfile).perform()& &&& & 1.3 double_click():& & &双击& &&& &&如:& &&& &&& &from&mon.action_chains&import&ActionChains& &&& &&& &&& &&...& &&& &&& &doubleClick=dr.find_element_by_id("xxx")& &&&& &&&&ActionChains(dr).&double_Click(doubleClick).perform()& &&& &&& &&& & 1.4 drag_and_drop(source,target):& &&拖动& &&& &&如:& &&& &&& &&from&mon.action_chains&import&ActionChains& &&& &&& &&& &&...& &&& &&& & dsource=dr.find_element_by_id("xxx")& &&& & #拖动的源元素& &&& &&& & dtarget=dr.find_element_by_id("xxx")& &&& & #释放的目标目标元素& &&&& &&&&ActionChains(dr).drag_and_drop(dsource,dtarget).perform()& &&& & 1.5 move_to_element(): &鼠标悬停& &&& &&如:& &&& &&& &from&mon.action_chains&import&ActionChains& &&& &&& &&& &&...& &&& &&& &above=dr.find_element_by_id("xxx")& &&&& &&&&ActionChains(dr).move_to_element(above).perform()四、键盘事件& &&& & 1.首先要导入键盘事件的包
from selenium.webdriver.common.keys import Keys
dr.get("")
dr.find_element_by_id("kw").send_keys("seleniumm")
#删除输入内容的最后一个字母,
dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#输入:空格+教程
dr.find_element_by_id("kw").send_keys(Keys.SPACE)
dr.find_element_by_id("kw").send_keys(u"教程")
#ctrl+a全选输入框内容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,‘a‘)
#ctrl+x剪贴输入框内容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,‘x‘)
#ctrl+v剪贴输入框内容
dr.find_element_by_id("kw").send_keys(Keys.CONTROL,‘v‘)
#回车键操作
dr.find_element_by_id("su").send_keys(Keys.ENTER)
dr.close()&&&&常用的键盘操作整理:&&&&send_keys(Keys.BACK_SPACE)&&#删除键BackSpace&&&&send_keys(Keys.SPACE)&&&&&&&#空格键Space&&&&send_keys(Keys.TAB)&&&&&&&&&#制表键Tab&&&&send_keys(Keys.ESCAPE)&&&&&&#回退键Esc&&&&send_keys(Keys.ENTER)&&&&&&&#回车键Enter&&&&send_keys(Keys.CONTROL,‘a‘)&#Ctrl+a&&&&send_keys(Keys.CONTROL,‘c‘)&#Ctrl+c&&&&&&&&send_keys(Keys.CONTROL,‘x‘)&#Ctrl+x&&&&send_keys(Keys.CONTROL,‘v‘)&#Ctrl+x&&&&send_keys(Keys.F1)&&&&&&&&&&#F1,类似的有F1-F12五、获取验证& & 1.通常用到的验证信息有:title、URL、textdr.titledr.current_urldr.find_element_by_id("xx").text六、设置等待 & && & 1.显示等待:等待某个条件成立时,继续执行,否则达到最大等待时间后抛出异常:TimeoutException,显示等待是针对当前要定位元素使用WebDriverWait(driver,&timeout,poll_frequency,ignored_exceptions=None).until(method,message)& &&示例:WebDriverWait(dr,5,0.5,None).until(& &&expected_conditions.presence_of_element_located((By.ID,"kw1")),message=‘test‘)&解释:A.WebDriverWait():在设置时间内,默认间隔一段时间检测一次当前页面元素是否存在,若超过当前指定时间检测不到则抛出异常;B.driver:webdriver的浏览器驱动,ie、firefox、chromeaC.timeout:最长超时时间,以秒为单位D.poll_frequency:休眠间隔时间-步长,默认0.5秒E.ignored_exceptions:超时后异常信息,默认抛出NoSuchElementException异常F.until(method,message): 调用该方法提供的驱动作为一个参数,直到返回值为TrueG.until_not(method,message):调用该方法提供的驱动作为一个参数,直到返回值为FalseH.expected_conditions类提供的预期条件实现有:& & title_is:判断标题是否是xx& & title_contains:判断标题是否包含xx& &&presence_of_element_located:元素是否存在& &&visibility_of_element_located:元素是否存在& &&visibility_of:是否可见& &&presence_of_all_elements_located:判断一组元素是否存在& &&text_to_be_present_in_element:判断元素是否有xx文本信息&&& &&text_to_be_present_in_element_value:判断元素值是否有xx文本信息&&& &&frame_to_be_available_and_switch_to_it:表单是否可见,并切换到该表单& & invisibility_of_element_located:判断元素是否隐藏&&&&element_to_be_clickable:判断元素是否点击,它处于可见和启动状态&&&&staleness_of:等到一个元素不再依附于DOM&&&&element_to_be_selected:被选中的元素&&&&element_located_to_be_selected:一个期望的元素位于被选中&&&&element_selection_state_to_be:一个期望检查如果给定元素被选中&&&&element_located_selection_state_to_be:期望找到一个元素并检查是否是选择状态&&&&alert_is_present:预期一个警告信息&&& & 2.隐式等待:通过一定的时长等待页面所有元素加载完成,哪个元素超出设置时长没被加载就抛出异常NoSuchElementException,隐式等待是针对所有元素的& &&& &&implicitly_wait(5)& & #默认单位为秒& & 示例:& &&& &&dr.implicitly_wait(5)七、sleep休眠& & python中强制的程序等待& & from time import sleep& & sleep(4)& & #默认单位秒,设置小于1秒的时间可以用小数点如sleep(0.6)八、定位一组元素,类似与1中定位单个元素方法& & find_elements_by_id()&& &&& &&& &&& &&& &&如:&find_elements_by_id("kw")&&& & find_elements_by_name()&& &&& &&& &&& &&&&如:&find_elements_by_name("wd")& & find_elements_by_class_name()&& &&& &&& &&如:&find_elements_by_class_name("s_ipt")&& & find_elements_by_tag_name()&& &&& &&& & &&如:&find_elements_by_tag_name("input")&& & find_elements_by_link_text()&& &&& &&& &&&如:find_elements_by_link_text(u"新闻")& &&& & find_elements_by_partial_link_text()& & & 如:find_elements_by_partial_link_text(u"一个很长的")&& & find_elements_by_xpath()& &&& &&& &&& & &&如:&find_elements_by_xpath("&.//*[@id=‘kw‘]")&&& & find_elements_by_css_selector()& &&& & & &如:&find_elements_by_css_selector("#kw")& & 使用场景:& & a.批量操作对象,如选中页面上所有复选框& & b.先获取一组对象,再在这组对象里定位需要的的一些对象,如定位所有复选框,然后选择最后一个& &例如:代码如下checkbox.htm页面: type="text/css"body{font-size:12px; font-family:Tahoma;}.checkbox{vertical-align:middle; margin-top:0;} class="checkbox" type="checkbox" 元旦 type="checkbox" name="test" 圣诞节
type="checkbox" name="test" 股市 type="checkbox" name="test" 阿凡达
type="checkbox" name="test" 十月围城 type="checkbox" name="test" 水价上调 type="button" value="检测" id="btn" python代码:&&&&from&selenium&import&webdriver&&&&dr=webdriver.Firefox() &&&&dr.get("D:\\workspace\\pySelenium\\resources\\checkbox.htm")
#使用tagname方式选择页面上所有tagname为input的元素
select_tagname=dr.find_elements_by_tag_name("input")
#使用xpath方式选择页面上所有tagname为input的元素
select_xpath=dr.find_elements_by_xpath("//input[@type=‘checkbox‘]")
#使用css_select方式选择页面上所有tagname为input的元素
select_css=dr.find_elements_by_css_selector(‘input[type=checkbox]‘)
for i in select_tagname:
#循环对每个input元素进行点击选中操作
if i.get_attribute("type")==‘checkbox‘:
for j in select_xpath:
#循环对每个input元素进行点击取消操作
for k in select_css:
#循环对每个input元素进行点击选中操作
#打印出checkbox的个数
print ‘----页面上checkbox的个数为:‘,len(select_css)
#使用pop()获取1组元素的第几个元素
select_css.pop(0).click()
select_css.pop(1).click()
select_css.pop().click()
select_css.pop(-1).click()
select_css.pop(-2).click()
#倒数第二个
dr.close()& & 备注:pop():选择一组元素中的某一个,要注意的是:pop()和pop(-1)都表示最后一个元素九、多表单切换(对于有frame嵌套表单的操作)frame页面: frame
id=‘frameid‘ name=‘frameName‘ width="800" height="500" src=""python代码:
dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
dr.switch_to_frame("frameid")
#通过frame的id进入iframe
#dr.switch_to_frame("frameName") #通过frame的name进入iframe
#下面可以对frame进行操作了
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
dr.switch_to_default_content() #退出当前frame返回上一层备注:1.switch_to_frame()默认直接取表单的id或者name属性来切换& &&& 2.完成当前frame表单操作后,可以通过switch_to_default_content()方法返回上一层表单,即离的最近的switch_to_frame()方法& &&& & & 3.对于frame中没有id和name属性的通过下面方式进入frame(定位到frame以页面对象传入)python代码:
dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")
&#定位到frame页面元素&&&&framepath=dr.find_element_by_class_name("frameClassname")
&&&&dr.switch_to_frame(framepath)
#通过frame页面对象进入iframe
#下面可以对frame进行操作了
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
dr.switch_to_default_content() #退出当前frame返回上一层十、多窗口切换& & selenium-webdriver中使用switch_to_window()方法来切换任意窗口,常用方法有& &&& &&driver.current_window_handle& & #获取当前窗口句柄& &&driver.window_handles&& & & && &&#返回所有窗口句柄到当前会话& &&driver.switch_to_window() &&& &&#进入窗口,用于切换不同窗口python代码: & &
dr.get("")
current_handle=dr.current_window_handle
#获取百度首页窗口句柄
index_login=dr.find_element_by_xpath("//div[@id=‘u1‘]/a[@class=‘lb‘]")
#获取登录按钮对象
index_login.click() #点击登录
dr.implicitly_wait(5)
dr.find_element_by_class_name("pass-reglink").click()
#点击立即注册按钮
all_handles=dr.window_handles
#获取所有打开窗口句柄
for handle in all_handles:
if handle==current_handle:
dr.switch_to_window(handle)
...对首页窗口进行操作
print ‘----首页页面title:‘,dr.title
for handle in all_handles:
if handle!=current_handle:
dr.switch_to_window(handle)
...对注册窗口进行操作
print ‘----注册页面title:‘,dr.title十一、警告框处理& & webdriver中处理js生成的alert、confirm、prompt处理方法是:使用switch_to_alert()定位到alert/confirm/prompt,然后使用text、accept、dismiss、send_keys来根据需要操作。& & text:返回alert、confirm、prompt中的文字信息& & accept:点击确认按钮& & dismiss:点击取消按钮& & send_keys:在alert、confirm有对话框时输入值python代码:
dr.get("")
set_link=dr.find_element_by_xpath("//div[@id=‘u1‘]/a[@class=‘pf‘]") #找到设置链接元素
ActionChains(dr).move_to_element(set_link).perform()
#鼠标移动到设置上
dr.find_element_by_xpath("//a[@class=‘setpref‘]").click()
#点击搜索设置链接
time.sleep(3)&&&&#加等待时间 等按钮可用,否则会报错
save_set=dr.find_element_by_css_selector("#gxszButton & a.prefpanelgo")#获取保存设置按钮
save_set.click() #点击保存设置按钮
alert=dr.switch_to_alert()&&&&&&&&&&&&&&&&&&&&#进入alert
print ‘----弹出alert中内容为:‘,alert.text
#打印对话框里的文字内容
alert.accept()
#对话框里点击alert中确定按钮
#alert.dismiss()
#对话框里点击取消按钮
#alert.send_keys("对话框中输入的内容")
#在对话框里输入内容十二、上传文件& & 分2种:普通上传、插件上传& & 普通上传:将本地文件的路径作为一个值放到input标签中,通过form表单提交时,将值传给服务器中去& & 插件上传:指基于flash、javascript或ajax技术实现的上传功能或插件。& & 1.针对普通上传用send_keys实现python代码:
dr.get("D:\\workspace\\pySelenium\\resources\\upload.htm")
loadFile=dr.find_element_by_name("filebutton")
# 获取上传文件input元素节点
loadFile.send_keys("D:\\workspace\\pySelenium\\resources\\frame.htm")
#输入上传文件地址来实现上传& & 2.插件上传:使用AutoIt实现,--需要安装AutoIt程序& &&& &&AutoIt安装,使用暂时略,需要时再追加,流程为:用AutoIt编写上传文件脚本生成exe文件,在python脚本中进行调用python代码:
loadFile=dr.find_element_by_name("filebutton")
# 获取上传按钮
loadFile.click()&&&&#点击上传按钮,弹出上传对话框
os.system("D:\\autoItFile.exe")&&&&#调用autoIt生成的exe文件,实现导入十三、下载文件:使用AutoIt实现,--需要安装AutoIt程序,方法同上传python代码:
ffp=webdriver.FirefoxProfile()
ffp.set_preference("browser.download.folderList",2)
#0:代表下载到浏览器默认路径下;2:下载到指定目录
ffp.set_preference("browser.download.manager.showWhenStarting",False)
#是否显示开始:True:显示;False:不显示
ffp.set_preference("browser.download.dir", os.getcwd()) #指定下载文件目录,os.getcwd()无参数,返回当前目录
# ffp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件类型,
#指定下载页面的content-type值,application/octet-stream为文件类型,http-content-type常用对照表搜索百度
dr=webdriver.Firefox(firefox_profile=ffp)
dr.get("https://pypi.python.org/pypi/selenium#downloads")
dr.find_element_by_xpath("//div[@id=‘content‘]/div[3]/table/tbody/tr[3]/td[1]/span/a[1]").click()
#接下来使用autoIt实现十四、cookies操作& & webdriver操作cookies的方法:& & get_cookies():获得所有cookies的值& & get_cookie(name):获得有特定name值的cookie信息& & add_cookie(cookie_dict):添加cookie,必须有name和value& & delete_cookie(name):删除特定名称的cookie信息,通过name找到特定的cookie并删除& & delete_all_cookies():删除浏览器中所有cookie的信息& & 注意:1.cookie是以字典形式进行存储的;& &&2.使用场景:如登录功能会把用户名写入浏览器cookie指定key为username,那么就可以通过get_cookies()找到username,打印value,找不到说明保存浏览器的cookie是有bug的。python代码:
dr.get("")
cookies=dr.get_cookies()
#获取cookie的所有信息
for ck in cookies:
print ‘----所有cookie‘,num,‘:‘,ck
#打印cookie的所有信息
print ‘----按name查cookie:‘,dr.get_cookie("PSTM")
#通过cookie的name获取cookie信息
dr.add_cookie({‘name‘:‘hello‘,‘value‘:‘‘}) #向name和value添加会话信息
cookies2=dr.get_cookies()
#重新获取cookie的所有信息
for ck2 in cookies2:
if ck2[‘name‘]==‘hello‘:
print "----加入的cookie信息:%s--&%s",(ck2[‘name‘],ck2[‘value‘])十五、javascript调用,python使用的方法:execute_script()python代码:
dr.get("")
dr.find_element_by_id("kw").send_keys("selenium")
dr.find_element_by_id("su").click()
js="var q=document.documentElement.scrollTop=1000"&&&&#滚动条滚到最下面
dr.execute_script(js)
time.sleep(4)
js2="var q=document.documentElement.scrollTop=0"&&&&&&#滚动条滚到页面顶
dr.execute_script(js2)十六、截图,适用于脚本出错时,对当前窗口进行截图保存,使用函数:get_screenshot_as_file()python代码:
dr.get("")
dr.find_element_by_id("kw1").send_keys("selenium")
dr.find_element_by_id("su").click()
except NoSuchElementException,msg:
dr.get_screenshot_as_file("d:\\error.jpg")&&&&#截图输出到d盘
dr.close()十七、关闭窗口& & quit():退出相关驱动程序并关闭所有窗口。& & close():关闭当前窗口,打给多个窗口时,可使用来关闭当前窗口十八、验证码处理& & 方法1:去掉验证码,问题:如果是在正式环境跑脚本那么在取掉会存在风险& & 方法2:设置万能验证码,不需要取消验证码,在程序中留后门--设置一个万能验证码,输入万能验证码了就标识通过python代码:&
import random
randnum=random.randint(1000,9999)
print "----生成随机数为:",randnum
input_num=input(u"请输入验证码:")
print "----输入验证码为:",input_num
if input_num==randnum:
print"随机数正确,登录成功"
elif input_num==1234:
print"输入正确,登录成功"
print "登录失败"& & 方法3:使用cookie方法获取,读取之前登录的cookie值访问时,直接登录,不需要验证码标签:
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 18周的胎儿 的文章

 

随机推荐