51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1581|回复: 1
打印 上一主题 下一主题

selenium 总结篇,常见方法和页面元素的操作

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-9 11:11:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天,总结一下selenium怎么操作web页面常见的元素。

主要有:

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



View Code
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





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

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

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

有以下几种方法:

F12 ,使用浏览器的console  ,xpath使用$x()  function,css使用    $() function                                                         
使用第三方插件firebug
使用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

<a href="http://www.cnblogs.com/tobecrazy/" >Copyright 2015 to be crazy </a>
一般使用click方法

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

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

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

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

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

如果你想在窗口之间切换

driver.switchTo().window(window);
小技巧: 如何滚动到你定位的元素

这里使用java script

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


接下来是所有测试代码:

复制代码
  1. package com.packt.webdriver.chapter1;

  2. import java.util.List;
  3. import java.util.Set;
  4. import java.util.concurrent.TimeUnit;

  5. import org.openqa.selenium.Alert;
  6. import org.openqa.selenium.By;
  7. import org.openqa.selenium.JavascriptExecutor;
  8. import org.openqa.selenium.Keys;
  9. import org.openqa.selenium.WebDriver;
  10. import org.openqa.selenium.WebElement;
  11. import org.openqa.selenium.interactions.Actions;
  12. import org.openqa.selenium.support.ui.Select;
  13. import org.testng.Assert;

  14. import com.packt.webdriver.chapter3.DriverFactory;

  15. /**
  16. * this method is for deal with base web elements
  17. *
  18. * [url=home.php?mod=space&uid=267564]@Author[/url] Young
  19. *
  20. */
  21. public class dealWithElements {

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

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

  37.         WebElement upload = driver.findElement(By
  38.                 .xpath("//td/input[@type='file']"));
  39.         upload.sendKeys("C:/Users/Young/Desktop/demo.html");
  40.         Assert.assertTrue(upload.getAttribute("value").contains("demo"));
  41.         // for alert
  42.         WebElement clickOnAlert = driver.findElement(By
  43.                 .xpath("//td/input[@name='alterbutton']"));
  44.         clickOnAlert.click();
  45.         delay(2);
  46.         // get alert
  47.         Alert alert = driver.switchTo().alert();
  48.         Assert.assertTrue(alert.getText().contains("alert"));
  49.         // click alert ok
  50.         alert.accept();

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


复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2018-4-9 11:11:50 | 只看该作者
  1. prompt.sendKeys("I love Selenium");
  2. prompt.accept();
  3. delay(5);
  4. Alert afterAccept = driver.switchTo().alert();
  5. Assert.assertTrue(afterAccept.getText().contains("I love Selenium"));
  6. // click alert ok
  7. afterAccept.accept();
  8. delay(2);
  9. // for confirm
  10. WebElement clickOnConfirm = driver.findElement(By
  11. .xpath("//td/input[@name='confirmbutton']"));
  12. clickOnConfirm.click();
  13. delay(2);
  14. Alert confirm = driver.switchTo().alert();
  15. confirm.dismiss();
  16. delay(2);
  17. Alert afterDismiss = driver.switchTo().alert();
  18. Assert.assertTrue(afterDismiss.getText().contains("You pressed Cancel"));
  19. delay(2);
  20. afterDismiss.accept();
  21. driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

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

  27. System.out.println(select.getAllSelectedOptions().toString());
  28. delay(2);
  29. WebElement showSelectResult = driver.findElement(By
  30. .name("showSelectResult"));
  31. showSelectResult.click();
  32. delay(2);
  33. Alert yourSelect = driver.switchTo().alert();
  34. Assert.assertTrue(yourSelect.getText().contains("苹果"));

  35. delay(2);
  36. yourSelect.accept();

  37. // input box
  38. WebElement editBox = driver.findElement(By
  39. .xpath("//td/input[@id='edit']"));
  40. editBox.sendKeys("Selenium is good");
  41. WebElement submitButton = driver.findElement(By
  42. .xpath("//input[@type='button' and @name='submit']"));
  43. submitButton.click();
  44. delay(2);
  45. Alert submitAlert = driver.switchTo().alert();
  46. Assert.assertEquals(submitAlert.getText(), "Selenium is good");
  47. submitAlert.accept();
  48. delay(2);

  49. // for radio Box

  50. WebElement duRadioBox = driver.findElement(By
  51. .cssSelector("div#radio>input.Baidu"));
  52. WebElement aLiRadioBox = driver.findElement(By
  53. .cssSelector("div#radio>input.Alibaba"));
  54. WebElement TXRadioBox = driver.findElement(By
  55. .cssSelector("div#radio>input.Tencent"));
  56. WebElement MiRadioBox = driver.findElement(By
  57. .cssSelector("div#radio>input.Mi"));
  58. delay(2);
  59. Assert.assertTrue(TXRadioBox.isSelected());
  60. Assert.assertTrue(!MiRadioBox.isEnabled());
  61. delay(2);
  62. duRadioBox.click();
  63. Assert.assertTrue(duRadioBox.isSelected());
  64. delay(2);

  65. aLiRadioBox.click();
  66. Assert.assertTrue(aLiRadioBox.isSelected());
  67. delay(2);

  68. // for checkBox

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

  71. for (WebElement e : webCheckBox) {
  72. e.click();
  73. Assert.assertTrue(e.isSelected());
  74. delay(2);
  75. }

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

  88. delay(3);
  89. Set<String> currentWindows = driver.getWindowHandles();
  90. System.out.println(currentWindows.size());
  91. for (String window : currentWindows) {
  92. if (!window.endsWith(defaultWindow)) {
  93. driver = driver.switchTo().window(window);
  94. driver.manage().timeouts()
  95. .pageLoadTimeout(60, TimeUnit.SECONDS);
  96. driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
  97. break;
  98. }
  99. }

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

  102. driver.quit();
  103. }

  104. /**
  105. * @author Young
  106. * @param seconds
  107. */
  108. public static void delay(int seconds) {
  109. try {
  110. Thread.sleep(seconds * 1000);
  111. } catch (InterruptedException e) {
  112. // TODO Auto-generated catch block
  113. e.printStackTrace();
  114. }
  115. }
  116. }
复制代码
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-23 08:08 , Processed in 0.066047 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表