51Testing软件测试论坛

标题: selenium+webdriver中对象识别问题 [打印本页]

作者: 517451737    时间: 2013-11-8 13:09
标题: selenium+webdriver中对象识别问题
本帖最后由 517451737 于 2013-11-8 13:12 编辑

[attach]87900[/attach]
新人请教下,selenium中,请问这个网页中可以直接对标记的那个对象操作吗?
需要做其他操作吗?[attach]87901[/attach]
作者: joykao    时间: 2013-11-11 13:37
回复 1# 517451737


    楼主你圈出来的想说明什么呢?这是个链接,如果你想找到这个元素的话。。有好多方法

linkText cssSelector。。。。等等都可以。。
作者: 517451737    时间: 2013-11-11 16:17
回复 2# joykao
我试过很多方法都报错呢,在这前面有个iframe中的登录框,登录成功后,会有这些链接!
但是我使用很多方法都报下面这种错误:
Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":"col_7"}
请问主要是什么问题?
作者: joykao    时间: 2013-11-11 17:20
本帖最后由 joykao 于 2013-11-11 17:30 编辑

回复 3# 517451737

你这个找出来的是不对的哇。。你的cssSelector的值应该是a[title=用户中心]col_7 这个class属性值有好多元素对应着呢。。。

driver.findElement(By.cssSelector("a[class='col_7'][title='用户中心']")).click
作者: 517451737    时间: 2013-11-12 10:17
回复 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=3201057&ptid=994646]4#[/url] joykao


    唉,还是报错呢,下面是登录的代码,请帮我看看是什么问题:
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestElsyy {
        public static void main(String[] args) {
                WebDriver driver = new FirefoxDriver();
                driver.get("http://www.elsyy.com");
                WebElement linkLogin = driver.findElement(By.xpath("//*[@id='loginReg']/a[1]"));
                linkLogin.click();
                 driver.switchTo().frame("loginDialog");
                 System.out.println("切换后标题:" + driver.getTitle());
                 driver.findElement(By.id("userName")).clear();
             driver.findElement(By.id("userName")).sendKeys("elsyytech");
             driver.findElement(By.id("password")).clear();
             driver.findElement(By.id("password")).sendKeys("123456");
            try{
                    Thread.sleep(10000);
            } catch (InterruptedException e) {
                    e.printStackTrace();
            }
            driver.findElement(By.xpath("//*[@id='commit']/img")).click();
            driver.switchTo().defaultContent();
            driver.findElement(By.cssSelector("a[class='col_7'][title='用户中心']")).click();
        }
}
作者: joykao    时间: 2013-11-12 10:26
回复 5# 517451737


    这代码可读性也太差了吧。。。让我猜?

不知道是不是公网。。。如果是可以在线调试下。。。那样比较好分析。。这样。。一头雾水。。。
作者: 517451737    时间: 2013-11-12 10:49
回复 6# joykao


    是公网,不知道是怎么回事,代码粘贴到这就成这样了!网站:www.elsyy.com   
  用户名:li5555/654321
如果有时间就请帮我看看,非常感谢!
作者: 六月天    时间: 2013-11-12 13:23
问题很简单,这个登录是用ajax完成的,而ajax不会引起整个页面刷新,对webdriver来说,他无法判断登录请求发起后是什么时候完成的。导致你的点击登录按钮之后,webdriver直接去页面找用户中心的链接了,而这个时候登录请求才发出去,还没有收到相应呢,也就是还处于未登录状态的页面,当然找不到你要的链接。所以你必须自己手动在点击登录按钮后,做一个等待,否则永远是失败的。
作者: 517451737    时间: 2013-11-12 14:29
回复 8# 六月天


    嗯,的确是这个原因!多谢多谢,还是需要师傅指导啊!
作者: aline_excellent    时间: 2014-9-29 11:13
六月天 发表于 2013-11-12 13:23
问题很简单,这个登录是用ajax完成的,而ajax不会引起整个页面刷新,对webdriver来说,他无法判断登录请求 ...

麻烦您,请问如何写等待的代码呢?多谢!!
作者: aline_excellent    时间: 2014-9-29 11:14
517451737 发表于 2013-11-12 14:29
回复 8# 六月天

您好,我和你遇到了同样的问题,请问你怎么写的等待的代码呢?
作者: 517451737    时间: 2014-10-20 11:01
aline_excellent 发表于 2014-9-29 11:14
您好,我和你遇到了同样的问题,请问你怎么写的等待的代码呢?

dr.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);  用这个就可以吧!
作者: 517451737    时间: 2014-10-20 11:01
aline_excellent 发表于 2014-9-29 11:14
您好,我和你遇到了同样的问题,请问你怎么写的等待的代码呢?

dr.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);  用这个就可以吧!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2