selenium找不到元素的几种原因(通过xpath定位元素不准确)

1.找到元素后,click没有作用,可以试试用action里的sendKeys模仿键盘敲enter键

(注意:1.enter之前可能需要tab;2.sendKeys之后需要perform)

例:

//点击数据中心类型下拉框

createObject.type.click();

//数据中心类型下拉框click点不到,用tab键和enter键代替(sendKeys之后要perform一下)

actions.sendKeys(Keys.TAB);

actions.perform(); actions.

sendKeys(Keys.ENTER);

actions.perform();

(另外,有时能点到,有时点不到,可能是页面不稳定,可以sleep一下试试)

2.获取某个元素不好获取时,可以获取他的子元素/父元素,然后获取对应元素

注意,`.`代表当前节点; '..'代表父节点

Webelement div= driver.findElement(By.xpath("//div[@id,'div']"));

通过xpath定位div的父元素:

WebElement input = div.findElement(By.xpath("./.."));

通过xpath定位div的子元素input(//表示从当前元素开始寻找下级、下下级、下下下级等):

WebElement input = div.findElement(By.xpath(".//input"));

3.获取元素进行点击等操作时,最好获取input等元素,有的元素是不可点击的,如span

4.获取到的元素是一组元素时,用获取多个元素的方法,获取到之后再get(i)来获取其中的某一个元素

5.清除输入框中的数据使用clear方法无效的时候,可以模拟键盘ctrl+A然后delete,具体操作如下updateObject.code.sendKeys(Keys.chord(Keys.CONTROL,"a"));

updateObject.code.sendKeys(Keys.DELETE);

6.如果在浏览器中新打开了一个页面,需要切换到新页面

//获取所有的打开的浏览器窗口 driver.getWindowHandles() 会返回一个set集合
Set winHandelsSet=driver.getWindowHandles();
// 将set集合存入list对象
List winHandels = new ArrayList(winHandelsSet);
//切换到新窗口
driver.switchTo().window(winHandels.get(1));
//切换到原来的窗口
driver.switchTo().window(winHandels.get(0));

顺便补充一个关闭tab窗口的方法

# 1.关闭浏览器全部标签页
driver.quit()
# 2.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页A)
driver.close()

7.定位复合class元素

例如:一个日历选择控件,今天的日期class是:9,其中,day 和 active 就是两个class 属性名称

解决方法:①如果这两个className中有一个是可以唯一确定这个元素,可以选择其中一个使用,如findElement(By.className("active");

②如果不能唯一确定,就先findElements,然后get(i);

8.元素在页面下方,需要滚动页面才能点到

参考 https://www.cnblogs.com/dk1024/p/11743889.html

本人测试,这个方法最好用 

WebElement element = driver.findElement(By.id("ID")));

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);

 

 

 

你可能感兴趣的:(selenium)