2017-02-14 20 views
1

Я застрял на одном конце, я не могу получить текстовое значение.Selenium using xpath - Как получить текст элементов с помощью текста их родственного элемента

Для лучшего обзора: -

<div class=""> 
<span class="address_city">Glenwood</span> 
<span class="address_state">GA</span> 
<span class="address_zip xh-highlight">30428</span> 
</div> 

Я определяю класс address_zip... используя следующий XPath:

//*[contains(text(),'30428')] 

Как я могу получить текстовое значение GA и Гленвуда?

ответ

1

Вы можете использовать preceding-sibling

//*[contains(text(),'30428')]/preceding-sibling::span[@class='address_city'] 
//*[contains(text(),'30428')]/preceding-sibling::span[@class='address_state'] 

Вы также можете найти zip-код и использовать его

WebElement zip = driver.findElement(By.xpath("//*[contains(text(),'30428')]")); 
String city = zip.findElement(By.xpath("//preceding-sibling::span[@class='address_city']")).getText(); 
String state = zip.findElement(By.xpath("//preceding-sibling::span[@class='address_state']")).getText(); 
+0

Спасибо, что я искал. – cod

0

Почему вы не просто использовать:

string city =Driver.FindElement(By.ClassName("address_city")).Text; 
string state =Driver.FindElement(By.ClassName("address_state")).Text; 

в случае, если эти классы дублируются для других элементов:

//first get the zip as you are doing now. 
IWebElement zip=Driver.FindElement(By.Xpath("//*[contains(text(),'30428')]")); 

//now get the father element. 
IWebElement father=zip.FindElement(By.XPath("..")); 

//now get all the spans 
IList<IWebElement> allElements=father.FindElements(By.TagName("span")); 

//reach the elements you want. 
IWebElement city=allElements.ElementAt(0); 
IWebElement state=allElements.ElementAt(1); 
+1

Это не сработает, потому что существует одинаковое имя класса для того же самого. Вот почему я спрашиваю, есть ли способ указать из текста() в верхний два элемента. – cod

0

Он не будет работать, сог есть имя дубликата класс для таких же, Вот почему я спрашиваю, что есть какой-нибудь способ, чтобы указать из текста() в верхней части два элемента.

Вы можете использовать ниже xpath: -

  • Чтобы получить Гленвуд текст:

    .//div[span[text() = '30428']]/span[@class = 'address_city'] 
    
  • Чтобы получить GA текст:

    .//div[span[text() = '30428']]/span[@class = 'address_state'] 
    
0

// [содержит (текст(), '30428')]/предшествующее-родственный :: пядь [содержит (@ класс 'address_city')] // [содержит (текст(),» 30428 ')]/предшествующее-родственный :: пядь [содержит (@ класс' address_state ')]

0

Попробуйте эти нижеуказанным xpath

Получить значение GA

//span[text()= '30428']/..//preceding-sibling::span[text()= 'GA')] 

Пояснение xpath: - Используйте метод text вместе с тегом <span> и перейдите по другому знаку <span>, используя preceding-sibling keyword.

ИЛИ

//span[text()= 'Glenwood']/following-sibling::span[text()= 'GA'] 

Объяснение XPath: - Использование text метод наряду с <span> тегом и двигаться вперед с другим <span> теге с помощью following-sibling keyword.

ИЛИ

//span[text()= 'Glenwood']/..//following-sibling::span[text()= 'GA'] 

Объяснение XPath: - Использование text метод наряду с <span> тегом и двигаться вперед с другим <span> теге с помощью following-sibling keyword.

Получить значение Glenwood

//span[text()= 'GA']/..//preceding-sibling::span[text()= 'Glenwood'] 

Объяснение XPath: - Использование text метод наряду с <span> тегом и двигаться вперед с другим <span> теге с помощью preceding-sibling keyword.