您的位置:首页 > 其它

Selenium系列之--02常见元素操作总结

2018-01-09 10:51 369 查看

一、Selenium总共有八种定位方法 

  1.  By.id()  通过id定位

  2.  By.name()  通过name 定位

  3.  By.xpath() 通过xpath定位

  4.  By.className() 通过className定位

  5.  By.cssSelector() 通过CSS 定位

  6.  By.linkText() 通过linkText

  7.  By.tagName() 通过tagName

  8.  By.partialLinkText() 通过匹到的部分linkText

目前,使用比较多的是cssSelector和xpath,

 

cssSelector有一些高级用法,熟练后可以方便地定位元素,如^用于匹配一个前缀,$用于匹配一个后缀,*用于匹配任意字符。例如:

a. 匹配一个有id属性,并且id属性是以”id_prefix_”开头的超链接元素:a[id^='id_prefix_']

b. 匹配一个有id属性,并且id属性是以”_id_sufix”结尾的超链接元素:a[id$='_id_sufix']

c. 匹配一个有id属性,并且id属性中包含”id_pattern”字符的超链接元素:a[id*='id_pattern']

最后总结:

1. 当页面元素有id属性时,最好尽量用id来定位。

2. xpath很强悍,但定位性能不是很好,所以尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。

3. 当要定位一组元素相同元素时,可以考虑用tagName或name。

4. 当有链接需要定位时,可以考虑linkText或partialLinkText方式。

 

二、浏览器常用操作

// 1.浏览器中加载URL: get() --首先要启动浏览器
driver.get("https://www.baidu.com");
driver.navigate().to("http://www.baidu.com/");
//navigate方法会产生1个Navigator对象,其封装了与导航相关的一些方法,比如前进后退等
// 2.浏览器最大化: window().maximize()
driver.manage().window().maximize();
  
// 3.刷新:refresh() driver.navigate().refresh();
// 4.截图:getScreenshotAs() File screenfile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenfile,new File("D:/12306.png"));
// 5.获取当前页的URL:getCurrentUrl() String url = driver.getCurrentUrl(); System.out.println(url);
// 6.获取当前页的title:getTitle() String title = driver.getTitle(); System.out.println(title);

 

三、常见页面元素操作总结

1. 文本框(input)

WebElement.sendKeys()    //元素赋值
WebElement.clear()       //清空
WebElement.getAttribute("value");    //获取元素的属性值(一组元素中非常实用)
WebElemetn.getText() //获取输入框文本内容

 注:对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过sendKeys()指定本地文件路径的方式实现文件上传

2. 单选按钮,多选按钮()

WebElement.click();
WebElement.isSelected();    //判断元素是否被选中
WebElement.isEnabled();
WebElement.isDisplayed();   //判断元素是否显示

3. 下拉选 select

WebElement.selectByIndex(int index) 通过index
WebElement.selectByVisibleText(String text) 通过匹配到的可见字符
WebElement.selectByValue(String value) 通过匹配到标签里的value 

详见:https://sqa.stackexchange.com/questions/12029/how-do-i-work-with-dropdowns-in-selenium-webdriver

4. 提示框Alert

细分三种,Alert,prompt,confirm

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

Alert(driver).accept() # 等同于点击“确认”或“OK”
Alert(driver).dismiss() # 等同于点击“取消”或“Cancel”
Alert(driver).authenticate(username,password) # 验证,针对需要身份验证的alert,目前还没有找到特别合适的示例页面
Alert(driver).send_keys(keysToSend) # 发送文本,对有提交需求的prompt框(上图3)
Alert(driver).text # 获取alert文本内容,对有信息显示的alert框

详见:https://www.cnblogs.com/qiaoyeye/p/5593428.html

5. 超链接

超链接比较常见,一般都是标签a
WebElement.click();

如果是chrome浏览器打开超链接时,点超链接的同时按下Ctrl会打开新标签,按下shift会打开新窗口

6.表单

提交方法:submit解释:查找到表单(from)直接调用submit即可

实例:driver.find_element_by_id("form1").submit()

切换方法:driver.switchTo().frame(xf)

解释:在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用, WebDriver 只能在一个页面上对元素识别与 定位, 对于 frame/iframe 表单内嵌页面上的元素无法直接定位。 这时就需要切换

dr.switchTo().frame("framename or id");
//frame直接跟id和名称均可

WebElement xf = driver.findElement(By.xpath("//*[@id='loginDiv']/iframe")); driver.switchTo().frame(xf); //-------跳出表单 driver.switchTo().defaultContent();

7. 窗口

获取窗口的方法:
1. driver.getWindowHandle(); 返回的是字符串,获取当前窗口的句柄
2. driver.getWindowHandles(); 返回的是 Set<String> ,获取所有窗口
窗口切换
driver.switchTo().window(window);

8. 浏览器的cookies

有时候我们需要验证浏览器中Cookie是否正确, 因为基于真实Cookie的测试是无法通过白盒测试和集成测试进行的。

getCookies()                   //获得所有 cookie 信息。
getCookieNamed(String name)    //返回字典的key为“name”的Cookie信息。
addCookie(cookie dict)         //添加Cookie。“cookie_dict”指字典对象,必须有 name和value值。
deleteCookieNamed(String name) //删除Cookie 信息。 “name”是要删除的 cookie的名称; “optionsString” 是该Cookie的选项,目前支持的选项包括“路径” , “域” 。
deleteAllCookies()             //删除所有 cookie 信息。

9. 隐式等待

  • implicitlyWait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常。
  • setScriptTimeout。异步脚本的超时时间。WebDriver可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。
  • pageLoadTimeout。页面加载时的超时时间。因为WebDriver会等页面加载完毕再进行后面的操作,所以如果页面超过设置时间依然没有加载完成,那么WebDriver就会抛出异常。
//页面加载超时时间设置为 5s
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
driver.get("https://www.baidu.com/");

//定位对象时给 10s 的时间, 如果 10s 内还定位不到则抛出异常
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("kw")).sendKeys("selenium");

//异步脚本的超时时间设置成 3s
driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: