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
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|