如何在Java + Selenium中获取由JavaScript动态更改的文本?

时间:2015-01-27 11:41:23

标签: java javascript selenium selenium-webdriver

我有id="time"的元素。此元素的值是动态更改的时间(采用“hh:ss”格式)(使用名为timer()的JavaScript脚本):

网站的一些代码:

<html>
    <head>
        <script type="text/javascript">
            var time = {"m":59,"s":59};

            function timer() {
                if (time['s'] < 0) {
                    time['s'] = 59;
                    time['m']--;
                }
                if (time['m'] == 0 && time['s'] == 0) {
                   //do something
                } else {
                    if (time['s'].toString().length == 2) {
                        return time['m'] + ':' + time['s']--;
                    } else {
                        return time['m'] + ':0' + time['s']--;
                    }
                }
            }

            time = document.getElementById('time')
            setInterval('time.innerHTML=timer()', 1e3)
        </script>
    <head>
<body>
    (...)
    <span id="time"></span>
    (...)
    </body>
</html>

现在我希望使用Selenium-WebDriver在Java中获得元素的当前值。 我试图通过span元素的getText()getAttribute("innerHTML")来做到这一点,如下所示:

String time = driver.findElement(By.id("time")).getText();

String time = driver.findElement(By.id("time")).getAttribute("innerHTML");

但它不起作用 - time在这两种情况下都是一个空字符串。

然后我尝试在Selenium中使用JavaScript:

JavascriptExecutor js = (JavascriptExecutor) driver;
String time = (String) js.executeScript("return document.getElementById('time').innerHTML;");

但是time也是一个空字符串。

在FireBug控制台中执行的脚本返回正确的值,例如:

>>> document.getElementById("time").innerHTML;
"58:20"

那么...如何在Selenium中获取当前值?

0 个答案:

没有答案