当前位置: 首页 > 知识库问答 >
问题:

无法打印与li标记关联的文本

赵嘉悦
2023-03-14

ul class=classname>xxx-2天前的GSA

wb.findElement(by.xpath(“<>”)).click();列表项=HTML_List.FindElements(By.TagName(“li”));system.out.println(“元素的大小是”+items.size());对于(WebElement item:items){html_list.sendkeys(keys.down);//模拟可视化移动wb.manage().timeouts().implicitlywait(1000,timeunit.seconds);system.out.println(item.gettext());}

共有1个答案

葛越泽
2023-03-14

Hypohesis#1:在点击第1行后,不必等待页面加载。li元素在DOM中,但它们没有完全加载。您可以通过在第1行和第2行之间引入延迟来测试该假设。我有用来等待页面加载的代码,但具体情况取决于JavaScript框架(例如jQuery、AngularJs)、加载旋转器实现和浏览器ReadyState。我的readystate逻辑如下所示:

/**
 * Wait for browser readystate to be complete. But don't wait forever.
 * 
 * @param webDriver
 */
public void waitForBrowserReadystateComplete(WebDriver webDriver) {
    for (int a=0; a<20; a++) {
        JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver;
        if (javascriptExecutor.executeScript("return document.readyState")
                .toString().equals("complete")) {
            break;
        }
        sleepResponsibly(500);
    }
}

public void sleepResponsibly(int timeMillisecond){
    try{
        Thread.sleep(timeMillisecond);
    } catch (InterruptedException ex) {
        Thread.currentThread().interrupt(); 
        throw new RuntimeException(ex);
    }
}

Hypthosis#2:文本节点复杂。我在方法getText()中遇到过一次失败,当文本节点编码复杂的格式设置时,它无法返回文本。我通过调用以下代码来解决这个问题:

public static String getTextFromElementsTextNodes(WebDriver webDriver, WebElement element) throws IllegalArgumentException {

    String text = "";
    if (webDriver instanceof JavascriptExecutor) {
        text = (String)((JavascriptExecutor) webDriver).executeScript(
                "var nodes = arguments[0].childNodes;" +
                "var text = '';" +
                "for (var i = 0; i < nodes.length; i++) {" +
                "    if (nodes[i].nodeType == Node.TEXT_NODE) {" +
                "        text += nodes[i].textContent;" +
                "    }" +
                "}" +
                "return text;"
                , element);
    } else {
        throw new IllegalArgumentException("driver is not an instance of JavascriptExecutor");
    }
    return text;
}

需要注意的是,getTextFromElementsTextNodes()可能返回非ASCII字符,因此我执行以下操作:

System.out.println(getTextFromElementsTextNodes(wb,item).replaceAll("[^\\x00-\\x7F]", " "));
 类似资料:
  • 我想获取我在 Web 表单中使用的多个标签的值。我使用隐藏的输入字段来完成这项工作,但我无法通过servlet打印标签的值,因为我得到空作为标签的值 下面是我用来测试的示例代码 索引.jsp 这是提交。服务程序 } 我想显示孩子的年龄,但输出为空 请帮助提供可能的解决方案 提前致谢

  • 问题内容: 我正在尝试使用tkinter.Label()小部件向tkinter GUI显示图像。该过程看起来很简单明了,但是此代码不起作用! 码: 当我们执行此代码时,它不会编译,并给出一个错误: 当我在没有其父项的情况下进行定义时,不会发生编译错误,但是GUI不会显示任何图像! 任何人都可以找出问题所在吗? 问题答案: 当我们尝试在Ipython中运行以上代码时,会发生此问题。可以通过换线来解决

  • 从浏览器到兄弟标签打印机 我想从web浏览器将标签打印到Brother标签打印机。我知道DYMO有一个JavaScript框架,可以使从浏览器打印变得简单。但我有一个兄弟标签打印机的客户,所以我需要使它工作。 所以使用谷歌Chrome因为它似乎不会打印页眉和页脚。我已经在笔记本电脑中安装了打印机/驱动程序,并创建了一个自定义纸张尺寸,尺寸为62毫米x 100毫米。但是标签文本不太清楚。我得到了模糊

  • 问题内容: 文件创建成功,但是我无法让PrintWriter将任何内容打印到文本文件。码: 问题答案: 您必须刷新和/或关闭文件才能将数据写入磁盘。 添加您的代码:

  • 我正在使用ESAPI记录器和log4j提供的记录器。用于配置的xml文件。我成功地打印了日志消息(只是一个带有main方法的平面java程序) 我的log4j.xml文件如下所示 我正在使用这些ESAPI.properties和validation.properties 问题是%M(用于模式布局)没有打印写日志消息的方法的名称。%M总是打印“log”(org . owasp . esapi . l