使用下一个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文本。
任何想法为什么这不适用于硒?如果有任何解决方法吗?
答案 0 :(得分:0)
我做了一个解决方案,但有点针对这个问题。但是让我们回答当时的问题。
它不起作用,因为selenium不支持文本元素,所以即使当selenium找到它不能将它映射到selenium对象时,我也没有看到它,因为我的代码隐藏了selenium异常。 Exception throw是下一个:
未处理的类型异常 WebDriver.dll中出现“OpenQA.Selenium.InvalidSelectorException”
其他信息:无效的选择器:xpath的结果 表达式“./precing-sibling :::text()”是:[object Text]。这应该 是一个元素
是的。我所做的是使用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();
希望有人能找到这个有用:)并感谢所有试图帮助我的人:)。