13

选择日期后,我无法从 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

4 回答 4

43

获取input文本的调用应该是:

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

不要问我为什么,这就是它一直以来的方式。通过键入input元素,您正在更改其value属性。

于 2012-06-29T08:46:19.053 回答
1

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

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

于 2012-08-16T20:21:10.443 回答
1

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

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

于 2016-07-14T17:41:56.550 回答
0

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

它总是返回已写入文本框中的值

于 2017-07-14T06:08:33.373 回答