【问题标题】:double slash for xpath. Selenium Java Webdriverxpath 的双斜杠。 Selenium Java 网络驱动程序
【发布时间】:2015-04-29 08:54:47
【问题描述】:

我正在使用 Selenium WebDriver。我对 xpath 有疑问。

如果我有以下代码示例:

<div>
     <div>
           <div>
                 <a>
                      <div>
                      </div>
                 </a>
           </div>
     </div>
</div>

我想找到最后一个&lt;div&gt; 中的元素。我认为 xpath 有 2 个选项。

第一个选项是单斜杠:

driver.findElement(By.xpath("/div/div/div/a/div")).click();

第二个选项是使用双斜杠(这是我有疑问的地方)。

driver.findElement(By.xpath("//a/div")).click();

它是否会直接在&lt;a&gt; 中搜索,但是如果html 示例代码只是更大代码的一部分而在这个更大的代码中更多的是“&lt;a&gt;”会发生什么?这种方法具体在哪里?

例如,如果我这样做会发生什么:

driver.findElement(By.xpath("//div")).click();

如果在 html 代码中找到每个&lt;div&gt;,它会查找吗?

【问题讨论】:

    标签: html selenium xpath selenium-webdriver


    【解决方案1】:

    首先,避免// 通常是正确的做法 - 因此,您展示的第一个表达式是完美的。

    如果在 html 代码中找到每个&lt;div&gt;,它会查找吗?

    是的,没错。 XPath 表达式,如

    //div
    

    将选择文档中的所有 div 元素,无论它们在哪里。

    如果 html 示例代码只是更大代码的一部分,而在这个更大的代码中更多的是&lt;a&gt;,会发生什么情况。这种方法具体在哪里?

    然后,让我们让 HTML “更大”:

    <div>
         <a>
             <p>C</p>
         </a>
         <div>
               <div>
                     <a>
                          <div>A</div>
                     </a>
               </div>
               <a>
                   <div>B</div>
               </a>
         </div>
    </div>
    

    如您所见,我又添加了两个a 元素——其中只有一个包含div 元素。假设这个新文档作为输入,现在会有一个区别

    /div/div/div/a/div
    

    这将选择 only &lt;div&gt;A&lt;/div&gt; 作为结果,并且

    //a/div
    

    这将同时选择&lt;div&gt;A&lt;/div&gt;&lt;div&gt;B&lt;/div&gt; - 因为a 在树中的确切位置现在无关紧要。但是它们都不会选择包含p 的第一个a 元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多