A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Selenium RC的工作原理

1.RC的组成



(1)Selenium Server

Selenium Server负责控制浏览器行为,总的来说,Selenium Server主要包括3个部分:Launcher,Http Proxy,Selenium Core。其中Selenium Core是被Selenium Server嵌入到浏览器页面中的。其实Selenium Core就是一堆JS函数的集合,就是通过这些JS函数,我们才可以实现用程序对浏览器进行操作。

2)Client Libraries:

写测试案例时用来控制Selenium Server的库。

SeleniumRC 与Testcase的关系

(1)测试案例(Testcase)通过Client Lib的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接。Selenium Server是一个独立的中间服务器(确切地说是代理服务器),它可以架设在其他机器上!所以测试案例通过发送HTTP请求去控制Selenium Server。

(2)Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy。

(3)测试案例通过Client Lib的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作。

(4)Selenium Core接收到指令后,执行操作。

(5)浏览器收到新的页面请求信息(因为在(4)中,Selenium Core的操作可能引发新的页面请求),于是发送Http请求,请求新的Web页面。
由于Selenium Server在启动浏览器时做了手脚,所以Selenium Server会接收到所有由它启动的浏览器发送的请求。(6)SeleniumServer接收到浏览器的发送的Http请求后,自己重组Http请求,获取对应的Web页面。

(7)Selenium Server的Http Proxy把接收的Web页面返回给浏览器。



同源策略

同源策略,它是由Netscape提出的一个著名的安全策略。

现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当一个浏览器的两个tab页中分别打开来百度和谷歌的页面当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和百度同源的脚本才会被执行。

package test;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

//import java.util.Date;
import java.util.concurrent.TimeUnit;

public class Test_share {
        //private static Logger logger = Logger.getLogger(test_share.class);
//      boolean res = true;
        //private String errmsg = "";
//      Date stime = new Date();
        //public testReporter testReporter = new testReporter();
//      private String loginUrl = "http://1.163.com/";
//      private String loginUrl = "http://club.mail.163.com/jifen/index.do";
//      WebDriver driver;

//      @BeforeClass
//      public void setupBrowser(){
//              //启动chrome浏览器
//              System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
//              driver = new ChromeDriver();
//              //设置页面等待15秒超时
//              driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
//              //开页面
//              driver.get(loginUrl);
//      }
         WebDriver driver;
          private String baseUrl="http://1.163.com/";

          @BeforeClass
          public void setUp(){
                  System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
              driver = new ChromeDriver();
             driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
             driver.get(baseUrl);

          }
        @Test
        public void testExchange() throws InterruptedException{
                driver.findElement(By.linkText("首页")).click();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.findElement(By.linkText("十元专区")).click();
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.findElement(By.linkText("最新揭晓")).click();
            driver.findElement(By.linkText("晒单分享")).click();
            driver.findElement(By.linkText("手机平板")).click();
            driver.findElement(By.cssSelector("li.selected > a")).click();
            driver.findElement(By.cssSelector("img[alt=\"Apple iPhone6s Plus 64g 颜色随机\"]")).click();
            driver.findElement(By.cssSelector("span.btn-txt")).click();
            driver.findElement(By.id("quickBuy")).click();
            driver.findElement(By.linkText("×")).click();
/*              //通过id找文本框
                WebElement element = driver.findElement(By.id("id_username_txt"));
                //清除输入框中策内容
                element.clear();
                //填入账号
                element.sendKeys("yedazhuang2014");
                //填密码
                WebElement element2 = driver.findElement(By.id("id_password_txt"));
                element2.clear();
                element2.sendKeys("123456789a");
                //点击提交按钮
                WebElement element3 = driver.findElement(By.xpath("//a/span"));
                Thread.sleep(1000);
                element3.click();
                //检查页面title
                System.out.println("page title is: " + driver.getTitle());
                //检查url
                System.out.println("当前url是:"+driver.getCurrentUrl());
                //跳转到目标页面
                driver.get("http://club.mail.163.com/jifen/sanqu/list.do");
                Thread.sleep(3000);

                WebElement topic = driver.findElement(By.xpath("//a/font[text()='[兑换]']"));
                topic.click();
                Thread.sleep(3000);

                //获取窗口句柄
                String[] handles = new String[driver.getWindowHandles().size()];
                driver.getWindowHandles().toArray(handles);
                driver.switchTo().window(handles[1]);
                driver.findElement(By.xpath("/html/body/div[4]/div[2]/div/div/div/div[2]/div/div[2]/span/a")).click();*/
        }
        @AfterClass
        public void tearDownDriver(){
                driver.quit();
        }
}


---------------------
【转载,仅作分享,侵删】
作者:若海音符
原文:https://blog.csdn.net/Chenyt01/article/details/51793908
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马