selenium 常见方法和页面元素的操作

今天,总结一下selenium怎么操作web页面常见的元素。

主要有:

上传
alter dialog
prompt dialog
confirm dialog
select list
radio box
input box
checkBox
测试页面如下:

selenium 最核心的技巧是WebElement的识别和定位

selenium总共有八种定位方法

By.id() 通过id定位
By.name() 通过name 定位
By.xpath() 通过xpath定位
By.className() 通过className定位
By.cssSelector() 通过CSS 定位
By.linkText() 通过linkText
By.tagName() 通过tagName
By.partialLinkText() 通过匹到的部分linkText
目前,使用比较多的是cssSelector和xpath,因为一个页面中Id name className tagName LinkText等比较容易重复 不容易 确定唯一

接下来会有具体的例子来演示如何定位

上传文件

一般,上传页面如果是input,像这样的,可以使用sendkeys。插件上传,可以使用AutoIt 实现上传 编写脚本 来实现。AutoIt 的安装以及使用需要参考AutoIt 使用手册等相关文档。selenium 通过AutoIt 来操作window窗口的操作实质是通过java代码来调用AutoIt 生成的脚本.exe文件。

首先,这里使用xpath定位到该元素,然后使用sendKeys即可,sendKeys send你要上传的文件的绝对路径

1 //td/input[@type=‘file’]
也可以使用cssSelector,关于xpath和cssSelector更多知识,以后会做一些专题

1 td>input[type=‘file’]
如何验证你写的xptah/cssSelector是正确的呢?

有以下几种方法:

1、F12 ,使用浏览器的console ,xpath使用$x() function,css使用 $() function

2、使用第三方插件firebug

3、使用selenium IDE

alert对话框

细分三种,Alert,prompt,confirm

Selenium有以下方法:

Alert alert =driver.switchTo().alert();

  1. driver.switchTo().alert();  获取alert

  2. alert.accept(); 点确定

  3. alert.dismiss(); 点取消

  4. alert.getText();获取alert的内容

select菜单

select也是比较常见的,selenium封装了以下方法

创建select

WebElement selector = driver.findElement(By.id(“Selector”));
Select select = new Select(selector);

选择select的option有以下三种方法

selectByIndex(int index) 通过index
selectByVisibleText(String text) 通过匹配到的可见字符
selectByValue(String value) 通过匹配到标签里的value
WebElement selector = driver.findElement(By.id(“Selector”));
Select select = new Select(selector);
select.selectByIndex(3);
select.selectByVisibleText(“桃子”);
select.selectByValue(“apple”);

输入框

输入框就比较简单了,不再多说

sendKeys()输入内容

clear() 清空

单选框(RadioBox)

单选框可以有获取状态,是否被选中

radioBox.isSelected();
是否enable

radioBox.isEnabled()
使用click方法选中

复选框(checkBox)

复选框和单选框基本差不多,此处略

超链接

超链接比较常见,一般都是标签a

Copyright 2015 to be crazy
一般使用click方法

这里我们了解一下浏览器打开超链接时,如果是chrome,点超链接的同时按下Ctrl会打开新标签,按下shift会打开新窗口

这里单讲一下不同窗口切换.

selenium有两个关于获取窗口的方法:

  1. driver.getWindowHandle(); 返回的是字符串,获取当前窗口的句柄

  2. driver.getWindowHandles(); 返回的是 Set ,获取所有窗口

如果你想在窗口之间切换

driver.switchTo().window(window);

小技巧: 如何滚动到你定位的元素

这里使用java script

// scroll to mylink
JavascriptExecutor scroll = (JavascriptExecutor) driver;
scroll.executeScript(“arguments[0].scrollIntoView();”, myLink);

接下来是所有测试代码:

package com.packt.webdriver.chapter1;
import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import com.packt.webdriver.chapter3.DriverFactory;
/**

  • this method is for deal with base web elements
  • @author Young

*/public class dealWithElements {

public static void main(String[] args) throws Exception {
    String URL = "file://demo.html";
    String chromdriver="E:\\chromedriver.exe";
    System.setProperty("webdriver.chrome.driver", chromdriver);
    ChromeOptions options = new ChromeOptions();//        options.addExtensions(new File(""));
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability("chrome.switches",
            Arrays.asList("--start-maximized"));
    options.addArguments("--test-type", "--start-maximized");
    WebDriver driver=new ChromeDriver(options);

    driver.get(URL);
    // max size the browser        driver.manage().window().maximize();
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

    WebElement upload = driver.findElement(By
            .xpath("//td/input[@type='file']"));
    upload.sendKeys("C:/Users/Young/Desktop/demo.html");
    Assert.assertTrue(upload.getAttribute("value").contains("demo"));
    // for alert
    WebElement clickOnAlert = driver.findElement(By
            .xpath("//td/input[@name='alterbutton']"));
    clickOnAlert.click();
    delay(2);
    // get alert
    Alert alert = driver.switchTo().alert();
    Assert.assertTrue(alert.getText().contains("alert"));
    // click alert ok        alert.accept();

    delay(2);
    // for prompt
    WebElement clickOnPrompt = driver.findElement(By
            .xpath("//td/input[@name='promptbutton']"));
    clickOnPrompt.click();
    delay(2);
    Alert prompt = driver.switchTo().alert();

    prompt.sendKeys("I love Selenium");
    prompt.accept();
    delay(5);
    Alert afterAccept = driver.switchTo().alert();
    Assert.assertTrue(afterAccept.getText().contains("I love Selenium"));
    // click alert ok        

afterAccept.accept();
delay(2);
// for confirm
WebElement clickOnConfirm = driver.findElement(By.xpath("//td/input[@name=‘confirmbutton’]"));
clickOnConfirm.click();
delay(2);
Alert confirm = driver.switchTo().alert();
confirm.dismiss();
delay(2);
Alert afterDismiss = driver.switchTo().alert();
Assert.assertTrue(afterDismiss.getText().contains(“You pressed Cancel”));
delay(2);
afterDismiss.accept();
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

    WebElement selector = driver.findElement(By.id("Selector"));
    Select select = new Select(selector);
    select.selectByIndex(3);
    select.selectByVisibleText("桃子");
    select.selectByValue("apple");

    System.out.println(select.getAllSelectedOptions().toString());
    delay(2);
    WebElement showSelectResult = driver.findElement(By
            .name("showSelectResult"));
    showSelectResult.click();
    delay(2);
    Alert yourSelect = driver.switchTo().alert();
    Assert.assertTrue(yourSelect.getText().contains("苹果"));

    delay(2);
    yourSelect.accept();

    // input box
    WebElement editBox = driver.findElement(By
            .xpath("//td/input[@id='edit']"));
    editBox.sendKeys("Selenium is good");
    WebElement submitButton = driver.findElement(By
            .xpath("//input[@type='button' and @name='submit']"));
    submitButton.click();
    delay(2);
    Alert submitAlert = driver.switchTo().alert();
    Assert.assertEquals(submitAlert.getText(), "Selenium is good");
    submitAlert.accept();
    delay(2);

    // for radio Box
    WebElement duRadioBox = driver.findElement(By
            .cssSelector("div#radio>input.Baidu"));
    WebElement aLiRadioBox = driver.findElement(By
            .cssSelector("div#radio>input.Alibaba"));
    WebElement TXRadioBox = driver.findElement(By
            .cssSelector("div#radio>input.Tencent"));
    WebElement MiRadioBox = driver.findElement(By
            .cssSelector("div#radio>input.Mi"));
    delay(2);
    Assert.assertTrue(TXRadioBox.isSelected());
    Assert.assertTrue(!MiRadioBox.isEnabled());
    delay(2);
    duRadioBox.click();
    Assert.assertTrue(duRadioBox.isSelected());
    delay(2);

    aLiRadioBox.click();
    Assert.assertTrue(aLiRadioBox.isSelected());
    delay(2);

    // for checkBox
    List<WebElement> webCheckBox = driver.findElements(By
            .xpath("//input[@type='checkbox']"));

    for (WebElement e : webCheckBox) {
        e.click();
        Assert.assertTrue(e.isSelected());
        delay(2);
    }

    // for links
    String defaultWindow = driver.getWindowHandle();
    WebElement myLink = driver.findElement(By
            .linkText("Copyright 2015 to be crazy"));
    delay(3);
    // scroll to mylink
    JavascriptExecutor scroll = (JavascriptExecutor) driver;
    scroll.executeScript("arguments[0].scrollIntoView();", myLink);
    // open link in a new windows press shift when you click
    delay(2);
    Actions actions = new Actions(driver);
    actions.keyDown(Keys.SHIFT).click(myLink).perform();

    delay(3);
    Set<String> currentWindows = driver.getWindowHandles();
    System.out.println(currentWindows.size());
    for (String window : currentWindows) {
        if (!window.endsWith(defaultWindow)) {
            driver = driver.switchTo().window(window);
            driver.manage().timeouts()
                    .pageLoadTimeout(60, TimeUnit.SECONDS);
            driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
            break;
        }
    }

    Assert.assertTrue(driver.getCurrentUrl().contains("tobecrazy"));
    delay(10);

    driver.quit();
}

/**
 * @author Young
 * @param seconds
 */
public static void delay(int seconds) {
    try {
        Thread.sleep(seconds * 1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block            e.printStackTrace();
    }
}

}

句柄-切换窗口

now_handle = driver.current_window_handle #获取当前窗口句柄
print now_handle #输出当前获取的窗口句柄

    all_handles = driver.window_handles #获取所有窗口句柄

    for handle in all_handles:

        if handle != now_handle:
            print handle    #输出待选择的窗口句柄
            driver.switch_to_window(handle)

Form表单间切换

// 利用id来切换
driver.switchTo().frame(“if”);
// 利用name来切换
driver.switchTo().frame(“nf”);
// 利用定位元素来切换-xpath driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id=‘if’]")));
// 利用定位元素来切换-css
driver.switchTo().frame(driver.findElement(By.cssSelector("#if")));
// 切换到父frame
driver.switchTo().parentFrame();

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
常用命令篇: 1. Open(url) url可以是相对的,也可以是绝对的 如绝对的url:open(http://www.taobao.com/) 相对的url:open("/search?q=’aa’"); 2. Click(locator) click可以单击一个链接,按钮或者单选框复选框等。 Click系列的有:click、clickAt、clickAndWait、clickAtAndWait clickAt(locator,coordstring): coordstring是需要单击的坐标 3. doubleClick(locator) 双击操作,用户与click一致 4. type(locator,value) 可以为指定位置输入指定值,也可以为单选框和复选框按钮赋值,value是选项的值而不是文本内容 5. typeKeys(locator,value) 模拟用户输入的行为,与type不同的是,type是强行赋值,而typeKeys是完全模拟用户操作,一个键一个键敲上去的。当输入框原来就有值时,使用type会用新值替换旧值,而typeKeys则是在原来值上进行追加。如,原来值为aaa,现在要输入bbb,使用type则最终值为bbb,使用typeKeys则最终值为aaabbb. 6. focus(locator) 将焦点移动到指定的元素上,如果是一个可输入的元素,则将聚焦到输入框 7. select(locator,option) 选择下列框的选项,option默认为标签label 如selenium.select (“size_select”,”label=small”),id=size_select 8. selenium.goBack()后退 9. highlight(locator)指定元素高亮 10. refresh()刷新当前页面 11. AssertText(locator,pattern) 验证某个元素的文本值是否与预期值一致,locator为元素定位,pattern为预期值 12. AssertAttribute(attributelocator,pattern) 验证某个元素的某个属性值与预期值是否一致,attributelocator为属性定位,pattern为预期值 13.assertEquals(value,selenium.getAttribute(xpath+"@value")) 验证某个元素的属性值或者是文本值是否与预期值一致 14. assertInPara(remark_para_1, getRemark(engine_type)); 一般用于验证url和remark串 15. mouseOver(locator) 将鼠标停留在某个元素上,locator为元素定位。 16. mouseDown(locator)/mouseUp(locator) 用户在某个元素上按下或者释放鼠标。Locator为元素定位 17. keyDown(locator,keysequence)/ keyUp(locator,keysequence) 用户按下或者释放某一个按钮,Locator为元素定位,keysequence为按键对应的ASCII码 18. indexOf:判断两个字符串是否存在包含关系 若x=”abcd”;y=”bc”;则有X.indexOf(y)==0 若不存在包含关系,则X.indexOf(y)==-1 19. System.out.println(value); 可以向屏幕打印出value值,这个value值可以是元素的属性值或者文本值等 20. selenium.getCookie(); 可以取到当前页面的cookie值 21. selenium.deleteCookie(name,path) 删除cookie值的某个参数,如下: selenium.deleteCookie("_nk_","path=/, domain=.taobao.com, recurse=true"); 删除_nk_参数,path的格式必须指定上面三个字段,path=/表示当前路径,domain=.taobao.com为改cookie所属的域,recurse=true 22. assertValue(locator,pattern) 验证某个可输入元素是否被赋了某个值 23. selenium.close() 关闭浏览器。 24. contextMenu(locator)打开关联的菜单,与右键作用差不多,但是对弹出的菜单selen

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈希哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值