无法使用selenium webdriver的gettext()从文本框中读取文本?

时间:2012-06-29 08:05:23

标签: ajax selenium webdriver

我无法在日期选择之后从ajax日历控件中读取日期

http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Calendar/Calendar.aspx

我没有收到任何错误,但我无法从文本框中获取任何值。

public static void main(String[] args) throws InterruptedException {

        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Calendar/Calendar.aspx");
        driver.manage().window().maximize();


        //Default calendar: 
        driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_Date1']")).click();

        for(int i=0;i<=5;i++){

            for(int j = 0;j<=6;j++){

                System.out.print(driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_defaultCalendarExtender_day_"+i+"_"+j+"']")).getText()+"-");

            }
            System.out.println();
        }

        driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_defaultCalendarExtender_day_3_4']")).click();

        System.out.println(driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_Date1']")).getText());


        //Calendar with an associated button:

        System.out.println("Calendar with an associated button:------------------------------------------------------");

        driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_Image1']")).click();

        for(int i=0;i<=5;i++){

            for(int j = 0;j<=6;j++){

                System.out.print(driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_calendarButtonExtender_day_"+i+"_"+j+"']")).getText()+"-");

            }
            System.out.println();
        }

        Thread.sleep(5000L);
        driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_Image1']")).click();
        driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_calendarButtonExtender_day_3_3']")).click();

        System.out.println(driver.findElement(By.xpath("//*[@id='ctl00_SampleContent_Date5']")).getText());


    }

4 个答案:

答案 0 :(得分:41)

获取input文字的电话应为:

driver.findElement(By.id("ctl00_SampleContent_Date5")).getAttribute("value");

不要问我为什么,这只是always has been的方式。通过键入input元素,您将更改其value属性。

答案 1 :(得分:1)

我认为Selenium与DOM的工作方式保持一致,但我认为任何用户都不认为getText不会返回屏幕中可见的内容。 innerHTML和innerText都返回空字符串,以便解释为什么getText不返回任何内容。

我认为Selenium应该简化DOM的怪异性。换句话说,getText()应该返回用户在屏幕上看到的内容,然后如果用例需要真正的innerText,他们可以调用其他API。

答案 2 :(得分:0)

在这种情况下,您应该调用getAttribute("value")

我相信getText()只返回元素的内部文本,而不是输入的值。

答案 3 :(得分:0)

driver.findElement(By.id(&#34; ctl00_SampleContent_Date5&#34))的getAttribute。(&#34;值&#34);

它始终返回已在文本框中写入的值