Предыдущий Selenium возвращает указатель / адрес, а полный xpath возвращает другой указатель / адрес, который, как я считаю, должен быть одним и тем же объектом. - PullRequest
1 голос
/ 24 октября 2019

Относительный Xpath

WebElement precedingClass = driver.findElement(By.xpath("//div[contains(@class, 'pictures')]/preceding::div[contains (@class 'monkey picture') ]"));

Абсолютный Xpath

WebElment fullXpathAddress = driver.findElement(By.xpath("/html/body/div[6]/div/div[1]/div[1]/div/div[2]/ul/li[20]/div[1]");   

HTML-код:

<div class="pictures">
 <a ref ....>
 <a ref ....>
 <h1>x's pictures</h1>
</div>
<div class="animals">
   <div class="monkey picture" title="happy monkey"></div>
   .
   .
</div>

Ответы [ 3 ]

1 голос
/ 24 октября 2019

Предшествующий: Выберите все узлы, которые предшествуют текущему узлу.

И вы хотите выбрать узел, следующий за текущим узлом. Возможно, вы можете использовать следующее, как показано ниже:

"//div[contains(@class, 'pictures')]/following::div[@class='animals']/div[@class='monkey picture']"

, пожалуйста, обратитесь по этой ссылке , чтобы узнать больше о Xpaths

Пожалуйста, оптимизируйте вышеуказанный Xpath на основе всей вашей структуры DOM.

0 голосов
/ 29 октября 2019

Мне удалось использовать предыдущий :: div [x], так как я смог определить индекс div "изображение обезьяны" в списке животных, и с самого начала животных число div, предшествующих "картинкам, былофиксированное значение.

0 голосов
/ 24 октября 2019

Ваш Xpath кажется неправильным

Попробуйте ниже Xpath:

//div[@class='pictures']/following-sibling::a//div[@class='monkey picture']

Таким образом, код будет выглядеть так:

WebElment element = driver.findElement(By.xpath("//div[@class='pictures']/following-sibling::a//div[@class='monkey picture']"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...