简单的Xpath拼图

时间:2013-05-28 01:59:05

标签: html xpath

我正在尝试使用Selenium自动化Google Translate网络界面(但是没有必要了解Selenium来理解这个问题,只要知道它找到元素并点击它们)。我一直坚持选择要翻译的语言。

我无法达到下拉菜单打开的程度,如下面的屏幕截图所示。

现在,我想选择'日语'。

这个xpath表达式有效:$b.find_element(:xpath,"//*[@id=':13']/div").click但我宁愿有一个我只能输入语言名称的地方。

此xpath表达式也有效:$b.find_element(:xpath,"//*[contains(text(),'Japanese')]").click但只要页面上没有其他“日语”文本。

所以我正在尝试缩小xpath的范围,但是当我尝试指定要查找“日语”文本的路径时,表达式不再有效,我找不到元素:{ {1}}

它也不再适用于原始xpath:$b.find_element(:xpath,"//*div[@id='gt-sl-gms']/*[contains(text(),'Japanese')]").click 这很奇怪,因为要关闭下拉菜单,我使用此xpath $b.find_element(:xpath,"//*div[@id='gt-sl-gms']/*[@id=':13']/div").click

所以并不是说我的表情中有两个通配符,而是我的表达方式不太具体。我还缺少其他东西,我确信这很简单。

任何建议都表示赞赏。

编辑我尝试过的其他事情都失败了:

$b.find_element(:xpath,"//*[@id='gt-sl-gms']/*[contains(text(),'From:')]").click $b.find_element(:xpath,"//*/div[@id='gt-sl-gms']/*[@id=':13']/div").click $b.find_element(:xpath,"//*[@id='gt-sl-gms']/*[@id=':13']/div").click

3 个答案:

答案 0 :(得分:2)

*div不正确,应该只是div。此外,根据HTML的结构,您可能需要//而不是/

答案 1 :(得分:2)

尝试选择后代(//)而不是(/ *),这实际上是孙子或更深。

答案 2 :(得分:2)

如果带有“@id =':13'”的div是带有“@ id ='gt-sl-gms”的div的后代,那么你的xpaht "//*[@id='gt-sl-gms']//*[@id=':13']/div"就可以了。 上面的xpaht期望html看起来像:

<div id="gt-sl-gms">
    <div>
        <div id=":13">
            <div></div>
        </div>
    </div>
</div>

如果<div id="gt-sl-gms">不是祖先(正如我所料),您必须寻找“真正的”祖先,或者您可以使用跟随(对于文档后面的节点)或 follow-sibling (对于稍后文档中与之前相同级别的节点。