Как получить текстовую дату вступления в силу из текстового узла в узле th с помощью Selenium и Java - PullRequest
0 голосов
/ 10 июля 2020

Я хочу получить текст Дата вступления в силу из изображения ниже. Как написать для этого xpath?

Снимок HTML:

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

Текст Дата вступления в силу находится внутри текстового узла . Таким образом, чтобы получить текст, вы должны вызвать WebDriverWait для visibilityOfElementLocated(), и вы можете использовать любую из следующих стратегий локатора :

  • cssSelector:

    System.out.println(((JavascriptExecutor)driver).executeScript("return arguments[0].lastChild.textContent;", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("table.data_form.label tbody > tr > th")))).toString());
    
  • xpath:

    System.out.println(((JavascriptExecutor)driver).executeScript("return arguments[0].lastChild.textContent;", new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//table[@class='data_form label']//tbody/tr/th")))).toString());
    
0 голосов
/ 11 июля 2020

В Selenium я обычно предпочитаю использовать локатор id, когда он доступен. В этом случае для вашего целевого элемента нет идентификатора. Следующим моим вариантом было бы проверить, могу ли я использовать свойство name, которое здесь также недоступно. Поэтому я обычно использую xpath в качестве последнего варианта, не то чтобы это плохо, но медленно. Однако xpath обычно очень способный, с его помощью вы можете найти почти что угодно. В вашем случае вот локатор, который я бы использовал:

String elementLocator = "//span[@id='rightmandatory']/parent::th";
String text = driver.findElement(By.xpath(elementLocator)).getText();

Если метод getText() считывает текст из элемента span, вы можете в качестве альтернативы заменить его на .getAttribute("innerHTML"). Конечно, здесь можно использовать и другие локаторы, но вы запрашиваете xpath. Надеюсь, это поможет.

0 голосов
/ 10 июля 2020

Это возможно, но я бы попытался сделать это с помощью CSS.

С XPath:

String spanText= driver.findElement(By.xpath(
                   "//*[@class='yourDiv']/.//span[contains(@id,'yourLabel')]"))
              .getAttribute("innerHTML");

С CSS:

String spanText = driver.findElement(By.cssSelector("#IdOfDiv span.selectLabel"))
              .getAttribute("innerHTML");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...