Selenium previous-sibling :: text()不起作用

时间:2016-02-19 16:06:07

标签: selenium xpath

使用下一个xpath" ./ preceding-sibling :: text()"我遇到了selenium的问题。 我不明白为什么,我的第一个想法是IE不支持xpath声明,但它也没有在chrome上工作。

我要做的是验证单选按钮是否有某个文字"附近"它。例如,如果单选按钮是这样的

<div>
  <label> Yes <input name='radioBtn'></input></label>
  <label> No <input name='radioBtn'></input></label>
</div>

这是一个简化的场景,我需要检查&#34;是&#34;单选按钮,所以我正在做的是搜索radiobutton并检查它是否previous-sibling :: text(),但selenium无法找到任何元素。我知道Xpath有效,因为我在chrome开发人员工具上测试它并返回文本&#34;是&#34;。

我无法做出像输入[1]&#39;因为我无法确定第一个是否总是带有Yes文本。

任何想法为什么这不适用于硒?如果有任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

我做了一个解决方案,但有点针对这个问题。但是让我们回答当时的问题。

  1. 知道为什么这不适用于硒?
  2. 它不起作用,因为selenium不支持文本元素,所以即使当selenium找到它不能将它映射到selenium对象时,我也没有看到它,因为我的代码隐藏了selenium异常。 Exception throw是下一个:

      

    未处理的类型异常   WebDriver.dll中出现“OpenQA.Selenium.InvalidSelectorException”

         

    其他信息:无效的选择器:xpath的结果   表达式“./precing-sibling :::text()”是:[object Text]。这应该   是一个元素

    1. 有什么工作吗?
    2. 是的。我所做的是使用selenium IJavaScriptExecutor运行java脚本。使用脚本我修改了前面的兄弟文本并将其作为字符串返回,所以如果文本等于我正在寻找的东西(即是),则表示这是我正在寻找的单选按钮。 代码看起来与此类似(它可能有一些sintax错误,因为我没有从源代码复制):

      string script =  "function GetPrecedingText(node){"+
      "var result = document.evaluate('./preceding-sibling::text()[1]', node, null, XPathResult.STRING_TYPE, null);"+
      "return (result==null) ? '' : result.stringValue.trim();}"+
      "return GetPrecedingText(arguments[0])";
      
      string result = ((driver as IJavaScriptExecutor).ExecuteScript(script, SeleniumElement)).toString();
      

      希望有人能找到这个有用:)并感谢所有试图帮助我的人:)。