Selenium 知识点收集

Selenium 官方网站

Selenium API

Selenium 教程


Jar   http://selenium-release.storage.googleapis.com/index.html


学好前端知识也很重要。JavaScript W3School


Selenium 调用IEDriverServerIE浏览器


Selenium WebDriver中常用到的JavaScript操作

import org.openqa.selenium.JavascriptExecutor; 

method

详情

executeScript

同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕;

executeAsyncScript

异步方法,它不会阻塞主线程执行。

操作滚动条 

垂直滚动

String scroll = "document.documentElement.scrollTop=" + "y";

JavascriptExecutor js=(JavascriptExecutor) driver;

js.executeScript(scroll);

滚动条式

String scroll = "document.getElementById("location").scrollLeft=x";

JavascriptExecutor js=(JavascriptExecutor)driver;

js.executeScript(scroll);

 js.executeScript("scrollTo(0,10000)");

WebElement e = findElement(locator.getLocator(name));

js.executeScript("arguments[0].scrollIntoView(true)", e);
         

操作文本

String text = "text"; //输入的内容

String js = "var sum=document.getElementById('id');

sum.value='" + text + "';";

((JavascriptExecutor)driver).executeScript(js);

操作视频

JavascriptExecutor js=(JavascriptExecutor) driver;

//获取视频url js.executeScript("return arguments[0].currentSrc;",video);

//播放视频 js.executeScript("return arguments[0].play()", video);

//暂停视频 js.executeScript("arguments[0].pause()", video);

String command="document.getElementById().style.buttom="0""
           JavescriptExecutor js=(JavescriptExecutor) driver;
           js.JaveScript(command);

ScriptEngine ,java 有支持调用js的解析引擎。

 


Selenium Webdriver 的使用java执行js代码 解决 ScriptEngine不支持浏览器内置对象

ScriptEngineManager manager = new ScriptEngineManager();
               List<ScriptEngineFactory> factories = manager.getEngineFactories();
                   for (ScriptEngineFactory f : factories) {
                         System.out.println(f.getEngineName());}

ScriptEngine 本身 不带浏览器内核,那么就需要去找其他解析引擎;

什么是浏览器内核?
 


Webdriver对各种浏览器的支持

HtmlUnitDriver,IE,Firefox, Chrome

Chrome Driver 

谷歌驱动和和浏览器的版本对照及下载 http://chromedriver.storage.googleapis.com/index.html


获取js渲染后的网页,cookies,close()与quit()

1..获取js渲染后的网页源代码

driver.page_source

2.获取cookie

driver.get_cookies()

3.selenium本身自带幽灵浏览器/无头浏览器,如何设置无头浏览器呢?

options = webdriver.FirefoxOptions()

options.headless = True(开启无头)

driver = webdriver.Firefox(firefox_options=options)

4.driver.close()与driver.quit()的区别

driver.close(): 关闭当前driver操作的窗口,其他窗口不会关闭。
           driver.quit(): 将driver浏览器对象退出,所有相关联窗口都会关闭。
 


selenium3+java 控制浏览器窗口操作

driver.manage().window().maximize();

driver.manage().window().setSize(new Dimension(480,800));

//执行浏览器后退

driver.navigate().back();

//执行浏览器返回

driver.navigate().forward();


alert、confirm 、类似alert的div布局

https://blog.csdn.net/huilan_same/article/details/52298460

switch_to.alert , accept() , text  Alert(driver) , dismiss()

  • 只能通过window的name来切换窗口,但window的name不是你想象的窗口title之类的,而是一串字符串,如‘{976ae257-19be-4b32-a82e-4ba5063ed0a2}’,所以你用title、url之类的想切window是不可能的
  • 关闭了新窗口之后,driver并不会自动跳转回原窗口,而是需要你switch回来,直接去定位窗口元素会报NoSuchElementException 失去焦点
     

selemnium 与 Frame

 抓取元素 ifream freamset 标签

public void switchFrameByIndex(int frameIndex) {

driver.switchTo().defaultContent();

driver.switchTo().frame(frameIndex);}


selemnium 元素查找

元素定位 具有相同的ID名称,按照层级定位,尽量避免一次性定位。否则找不到元素。即使是 findElement(By.id)

     下拉框元素定位

  1. selectByIndex() 根据索引来选取,从0开始
  2. selectByValue() 根据属性value的属性值来选取
  3. selectByVisibleText()根据标签之间的Text值,也就是页面显示的

下拉框定位  select 类型 复合型class
           选择对应元素
           WebElement job = driver.findElement(By.id("classname"));
           Select downList= New Select(job);
           downList.selectByIndex(2);
           downList.selectByValue(2);//指的是 select <option value="hongse">红色</option>中的value而不是红色
           downList.selectByText(2);
           取消选择对应元素
           if(downList.isMultiple)//判断是否是多选的下拉列表
           downList.deselectByIndex(2);//只能够应用在多选下拉列表
           下拉列表操作
           List<String> List=downList.getAllSelectedOptions()//只能够应用在多选下拉列表 并不是显示所有option中的值
           for(WebElement option:List){
                  option.getText();
            }
           downList.getFirstSelectedOption().getText()


多窗口的处理

String handle = driver.getWindowHandle();  

窗口handle并不是按照打开顺序产生的,每一次都是会有变化的,可以通过窗口title来进行窗口定位。

winNum = getCurrentWindowsNumber();

for (int i = 0; i < winNum; i++) {

String title = switchWindowGetTitle(i);

if (title.equalsIgnoreCase("XXXXXX")) {

this.swiththiswindow(i);

break;

}

}

 

public void swiththiswindow(int windowid) {

Set<String> winHandels = driver.getWindowHandles(); // 得到当前窗口的set集合

List<String> it = new ArrayList<String>(winHandels); // 将set集合存入list对象

if (windowid < winHandels.size()) {

driver.switchTo().window(it.get(windowid)); // 切换到弹出的新窗口

String title = driver.switchTo().window(it.get(windowid)).getTitle();

}

 

}


文件上传以及头像更换

大部分都是以 Input 类型为主

           driver.findElement(By.id("upload")).sendKeys("photo path")


Action 动作

模拟鼠标操作 与Click区别
           左击 Action actioin = New Action(driver) Action.click().perform() 
           右击 Action actioin = New Action(driver) Action.contextClick().perform()
           双击 Action actioin = New Action(driver) Action.DoubleClick().perform()
           悬停 Action actioin = New Action(driver) Action.moveToElement().perform()


selemnium 与 Ajax

基本上都是等待页面元素出现进行判别。

implicitly_wait()隐式等待和explicit_wait()显示等待

1、显式等待(如果10s没有找到元素则报错)
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

2、隐式等待(设置10s超时时间)
           driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
           区别:

Selenium显示等待和隐式等待的区别
           1、selenium的显示等待
            原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内              都没找到,那么久跳出Exception
             (简而言之,就是直到元素出现才去操作,如果超时则报异常)

2、selenium的隐式等待
           原理:隐式等待,就是在创建driver时,为浏览器对象创建一个等待时间,这个方法是得不到某个元素就等待一段时间,直到拿到某个元素位置。

注意:在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部断的刷新页面去寻找我们需要的元素

3、笨方法等待
           使当前线程进入等待,Thread.sleep();这种等待属于死等,很容易让线程挂掉,使程序抛异常,所以要慎用此方法
 

3、截图
           IWebDriver driver;
           string baseURL;
           baseURL = @"https://accounts.english.ctrip.com/signin/";
           driver = new InternetExplorerDriver();
           driver.Navigate().GoToUrl(baseURL);
           Screenshot ss= ((InternetExplorerDriver)driver).GetScreenshot();
           ss.SaveAsFile("aaaaa.png",System.Drawing.Imaging.ImageFormat.Png);


最后谢谢以上写博客的人,我们都是站在前人的基础上看的更高,更远。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值