2015-04-29 3 views
0

Я использую Selenium WebDriver. Я сомневаюсь в xpath.двойной слэш для xpath. Selenim Java Webdriver

Если у меня есть следующий код:

<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(); 

Будет ли это выглядит, если каждый <div> находится в HTML-код?

спасибо

ответ

1

Прежде всего, избегая //, как правило, то, что нужно сделать - это так, то первое выражение, которое вы показать совершенен.

Будет ли он выглядеть, если каждый <div> найден в html-коде?

Да, точно. Выражение XPath как

//div 

подберет всеdiv элементы в документе, независимо от того, где они находятся.

Что произойдет, если код примера html был частью более крупного кода и в приведенном выше коде больше <a> ?. Где бы этот метод выглядел точно?

Тогда давайте сделать 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 

который подберет только<div>A</div> как результат, и

//a/div 

который будет выбрать как <div>A</div> и <div>B</div> - потому что точное положение a в дереве теперь не имеет значения. Но ни один из них не выберет первый элемент a, который содержит p.

+0

Спасибо, теперь ясно;) –