Selenium WebDriver 获取文本

2023-12-05

我有一个<div name="myDiv">0</div>.

我尝试编写 myDiv 的测试0其中的文字。使用 WebDriver 是:

String text = webDriver.findElement(By.xpath("//div[@name='myDiv']")).getText();

但在结果中我有一个空字符串。我不应该使用 getText() 来获取 div 的内容吗?


我有同样的问题;经过一番挖掘,我发现了这一点:

https://groups.google.com/forum/#!msg/webdriver/fRb_1QOr3wg/wzUsW3Ll6bgJ

当您尝试在 CSS 属性“display”设置为“none”的元素上调用 WebElement#getText() 时,HTMLUnitDriver(显然还有 FirefoxDriver)将返回空字符串。

这是我的解决方案:

public void assertContainsText(final By by, final String value) { 
    browser.waitTillElementPresent(by);
        Boolean result = new WebDriverWait(getWebDriver(),Browser.DEFAULT_WAIT_TIMEOUT_SECONDS).until(new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver arg0) {
                WebElement elem = arg0.findElement(by);
                String text = "";
                if (elem.isDisplayed()) {
                    text = elem.getText();
                } else {
                  //have to use JavaScript because HtmlUnit will return empty string for a hidden element's text
                    text = (String) executeScript("return arguments[0].innerHTML", elem);
                    text = text.replace("<BR></BR>", "\n"); //scary
                }
                return text.contains(value);
            }
        });
        Assert.assertTrue(by.toString() + " contains value ["+value+"]", result);
}

是的,这就像罪恶一样丑陋。请注意 text.replace("
") - 这是因为当您提取原始数据时,HTML 标记不会被转义。如果您在元素上调用 #getText(),WebDriver 会很好地“取消转义”此内容。

我现在已向我们的 IT 人员提出请求,要求在我们的 CI 服务器上安装 X-Windows,以便我们可以运行 FirefoxDriver。除了 HTMLUnitDriver 带来的麻烦之外,我们什么也没有遇到,而且它的启动速度非常慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium WebDriver 获取文本 的相关文章

随机推荐

  • 不要等待页面加载

    我的问题是 我必须从中获取数据的站点加载花费了太多时间 这增加了测试用例的执行时间 我不想等待整个网站加载 我能做些什么 我使用了 30 秒的超时 但即使超过时间也不会引发异常 可能所有的javascript都是在网页的onload事件中调
  • 如何从 JFrame 的中心元素显示不同的页面(已设置为 BorderLayout)

    import java awt BorderLayout import java awt Component import javax swing JFrame import javax swing border Border public
  • 使用 Wix 升级

    我尝试了页面上列出的几乎所有解决方案如何实现WiX安装程序升级 但没有升级成功 升级的时候总是提示这个信息 已安装此产品的另一个版本 无法继续安装此版本 要配置或删除此产品的现有版本 请使用控制面板上的添加 删除程序 当我跟踪安装程序日志时
  • 用于匹配 JavaScript 括号和方括号的正则表达式

    我有这个与括号内的文本匹配的正则表达式 g 我希望能够匹配圆括号和方括号 这样它就能检测到字符串中的圆括号和方括号 这样我就可以给它着色 这应该是字符串 The quick brown fox 我想上色 quick and fox 所以我需
  • 为什么我无法编译 C# 中类接口中声明的自定义事件

    假设我有这个 public interface ISlider event CustomEventDelegate CustomEvent 在我实现 ISlider 的课程中 我尝试了这个 public CustomEventDelegat
  • Angular 控制器未使用 OcLazyLoad 和 ngRoute 加载

    我有一个应用程序 最初加载了大量脚本 并且随着开发的进行 该列表不断增长 我想在需要时延迟加载包含控制器的脚本 我使用 OcLazyLoad 和 ngRoute 作为路由选项 我确实尝试了 ui route 它实际上具有相同的最终结果 但导
  • 如何在XML中使用外部实体?

    我试图了解如何使用外部实体 但我遗漏了一些东西 我有第一个文件 测试实体 xml
  • Node.js readFileSync ZIP 文件

    我正在尝试读取 ZIP 文件并将其输出到浏览器 获取页面上显示的代码并将其另存为 ZIP 文件 fs readFileSync dir file zip utf 8 当我这样做时 我得到的输出以PK coG filename txt并持续一
  • ASP.NET MVC:使用 JsonResult 控制属性名称的序列化

    有没有办法控制 JSON 输出JsonResult具有属性 类似于您可以使用的方式XmlElementAttribute及其兄弟来控制 XML 序列化的输出 例如 给定以下类 public class Foo SomeJsonSeriali
  • MySQL:带有 ORDER BY COUNT 的 GROUP_CONCAT?

    这可能吗 假设我有一个地址列表 其中有很多重复的条目 我需要过滤掉所有重复项 因为有些地址的名称略有不同 但邮政编码和电话号码相同 首先 我对邮政编码和电话进行 GROUP BY SELECT name address postalcode
  • 如何使用 AWS Cloudformer 为现有 API 网关创建云形成模板?

    我已经使用 aws 控制台创建了一个 api 网关 我想使用以下方法为我的 api 网关生成 CloudFormation 模板云形成者 请帮忙 尽管 AWS 尚未发布官方声明 但 CloudFormer 似乎已终止生命周期 AWS 没有正
  • 使用正则表达式匹配编辑(重新编码、折叠、排序)因子级别

    我发现在 R 中操作因子变量过于复杂 清洁因素时我经常想做的事情包括 排序级别 不仅设置参考类别 而且将所有级别按逻辑 非字母顺序 排列为汇总表 x lt factor x levels new order 重新编码 重命名因子级别 简化名
  • iOS 中 NSOperation 和 NSOperationQueue 的后台任务

    我想上传一些文件 即使应用程序进入后台 这些文件也应该继续 目前 我正在从数据库检索文件 然后通过 NSOperation 将其添加到队列中 然后启动上传过程 即使应用程序进入后台或前台 也应上传所有文件 下面是单个任务的代码 任何人都可以
  • 如何找到 log4j 默认初始化中使用的 URL?

    Log4j默认初始化通过一个过程来查找并使用 URL 进行配置 之后 您如何才能找出最终使用的 URL 而无需自己编写相同的过程 如果您必须自己编写代码 您可能不会得到与 log4j 完全相同的结果 而且它可能会在未来的版本中发生变化 如果
  • 如何使用 Rails 发送电子邮件

    这可能非常直接和简单 但我是 ruby on Rails 的新手和菜鸟 我有一个简单的电子邮件 php 脚本 我在旧网站上使用过 但现在由于我已经转换为 Rails 我不确定如何创建与之等效的脚本 我尝试使用rails generate m
  • 为什么 echo 与 printf 结合显示错误的输出? [复制]

    这个问题在这里已经有答案了 有谁知道为什么当我执行此操作时 usr bin php 我明白了 1005 1005 1005 1005 1005 1005 你在混合echo and printf printf返回格式化字符串的长度 所以你的e
  • django-nonrel 和管理页面

    我正在尝试在 AppEngine 上为我的网站设置 Django 管理套件 但它不起作用 我正在使用 django nonrel 设置与 我网站的其余部分似乎工作正常 但我需要让管理员工作 以便我可以开始使用数据存储区 这是我得到的错误 D
  • 格式化 Emacs 函数中的标头以将缓冲区打印到 PDF(带换行)

    Rupert Swarbrick 提出了以下三个函数来将 Emacs 缓冲区打印为 pdf 其中行被换行 使用时通常不会出现这种情况 ps print 功能 问题是这个函数要实现换行 必须复制当前缓冲区 这有效地破坏了ps print bu
  • 使用C将exec进程发送到后台?

    我的问题听起来与此相同 但事实并非如此 在Linux中用C在后台启动一个进程 我知道如何执行 fork 但不知道如何将进程发送到后台 我的程序应该像一个简单的命令 unix shell 一样工作 支持管道和后台进程 我可以做管道和叉子 但我
  • Selenium WebDriver 获取文本

    我有一个 div 0 div 我尝试编写 myDiv 的测试0其中的文字 使用 WebDriver 是 String text webDriver findElement By xpath div name myDiv getText 但在