xpath 的双斜杠。硒 Java 网络驱动程序

double slash for xpath. Selenium Java Webdriver

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

如果我有下面的代码示例:

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

我想找到最后 <div> 中的元素。我想我有 2 个 xpath 选项。

第一个选项是单斜线:

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

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

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

它会直接在 <a> 中搜索吗,但是如果 html 示例代码只是更大代码的一部分,并且在这个更大的代码中更多的是 "<a>”?这个方法具体在哪里?

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

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

是否会在 html 代码中找到每个 <div>

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

Would it looks if every <div> found in the html code?

是的,没错。像

这样的 XPath 表达式
//div

将select所有div个元素放在文档中,不管它们在什么地方。

what happens if the html example code was just a part of a bigger code and in this bigger code are more <a>?. Where would this method look exactly?

然后,让我们制作 HTML "bigger":

<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

这将 select 只有 <div>A</div> 作为结果,并且

//a/div

select <div>A</div><div>B</div> - 因为 a 在树中的确切位置现在无关紧要。但是 none 将 select 第一个包含 p.

a 元素