2018-05-18关于Selenium中元素定位不准问题

首先简单总结一下selenium定位方法:

首先是HTML中如何定位

1.id定位 findElement(By.id("kw"))

2.name定位 findElement(By.name("wd"))

 3class定位 findElement(By.className("s_ipt"))

 4.tag定位 findElement(By.tagName("input"))

link定位:

 findElement(By.linkText("新闻"))

Xpath定位:

 findElement(By.xpath("//input[@id='kw']"))

 如果不想指定标签名,则也可以用星号(*)代替 层级与属性结合定位:

 findElement(By.xpath("//span[@class='bg s_ipt_wr']/input")) span[@class='bg s_ipt_wr']

通过class 属性定位到父元素,后面/input 就表示父元素下面的子元素。如果父元 素没有可利用的属性值,那么可以继续向上查找“爷爷”元素。 findElement(By.xpath("//input[@id='kw' and @class='su']/span/input"))


用任何方法定位163/126邮箱登录页面的元素都不可能定位到,eclipse工作台会显示Unable to locate element:…… 一种属于frame嵌套问题,应先进入frame层级之后在进行定位 CSS定位: 通过class 属性定位: findElement(By.cssSelector(".s_ipt")) 通过id 属性定位: findElement(By.cssSelector("#kw")) findElement(By.cssSelector("input[autocomplete='off']")) findElement(By.

 解决方案一: 因为126/163邮箱是在iframe中又嵌套了一个页面,所以首先需要先进入到iframe,代码如下: //启动Chrome浏览器 WebDriver driver = new ChromeDriver(); driver.get(http://mail.163.com/); //进入iframe driver.switchTo().frame("x-URS-iframe"); //定位账号、密码、登录 driver.findElement(By.cssSelector("[class='j-inputtext dlemail']")).sendKeys("username"); driver.findElement(By.cssSelector("[class='j-inputtext dlpwd']")).sendKeys("password"); driver.findElement(By.xpath("//div[@class='f-cb loginbox']/a")).click(); driver.quit() 再次启动之后,就会出现你需要的结果。

解决方案二: 由于网速问题,页面加载慢,有时候也会出现定位不到的可能,eclipse工作台会显示Unable to locate element:…… 这时需要在启动浏览器并打开网址后,添加: Thread.sleep(10000);

你可能感兴趣的:(2018-05-18关于Selenium中元素定位不准问题)