Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java+Selenium中获得JavaScript动态更改的文本?_Java_Javascript_Selenium_Selenium Webdriver - Fatal编程技术网

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

如何在Java+Selenium中获得JavaScript动态更改的文本?,java,javascript,selenium,selenium-webdriver,Java,Javascript,Selenium,Selenium Webdriver,我有一个id=time的元素。此元素的值是hh:ss格式的时间,通过使用名为timer:ss的JavaScript脚本动态更改 网站的一些代码: <html> <head> <script type="text/javascript"> var time = {"m":59,"s":59}; function timer() { if (time['s']

我有一个id=time的元素。此元素的值是hh:ss格式的时间,通过使用名为timer:ss的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中使用JavaScript:

JavascriptExecutor js = (JavascriptExecutor) driver;
String time = (String) js.executeScript("return document.getElementById('time').innerHTML;");
但时间也是一个空字符串

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

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

所以。。。如何获取Selenium中的当前值?

由于setInterval将在X秒后执行该函数,因此您的脚本也需要等待相同的时间。这可能是您的问题,测试要求在函数更新innerHTML之前使用它。@Arran,谢谢您的评论!这对我帮助很大。加载页面后,我使用sleep只等了一秒钟,现在所有获取值的方法都正常工作。
JavascriptExecutor js = (JavascriptExecutor) driver;
String time = (String) js.executeScript("return document.getElementById('time').innerHTML;");
>>> document.getElementById("time").innerHTML;
"58:20"