Как исправить xpath? - PullRequest
       4

Как исправить xpath?

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

Это xpath, который я должен использовать: "//*[@id="zona-mijloc"]/div/table/tbody/tr[1]/td[1]/label/kbd"

String id = driver.findElement(By.xpath("//*[@id=\"zona-mijloc\"]div/table/tr[1]/td[1]/label/kbd")).getText();

Это HTML-код

Ответы [ 4 ]

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

Вы можете выбрать последний элемент, используя last() в качестве индекса:

  1. //*[@id='zona-mijloc']//tbody//tr[last()]//kbd
  2. (//*[@id='zona-mijloc']//kbd)[last()]

Для получения текста в Seleniumубедитесь, что элемент виден. Вы можете дождаться видимости элемента, используя WebDriverWait:

WebDriverWait wait = new WebDriverWait(driver, 10)
String id = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='zona-mijloc']//tbody//tr[last()]//kbd"))).getText();
0 голосов
/ 08 октября 2019

Я не вижу весь HTML-код для элементов, на которые ссылается ваш XPath, но вы можете попробовать упростить путь следующим образом:

String id = driver.findElement(By.xpath("//table/tr[1]/td[1]/label/kbd")).getText();

Если это не работает для вас, я рекомендую опубликоватьHTML-код полной страницы, чтобы мы могли помочь вам лучше.

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

Пожалуйста, попробуйте этот xpath и дайте мне знать, как он работает.

//*[@id="zona-mijloc"]//div/table/tbody/tr/td/label/kbd

Я могу найти 3 элемента с указанным выше xpath. Если вы хотите захватить текст всех 3 элементов, попробуйте приведенный ниже код. Иначе он получит текст первых элементов.

Код Java:

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class SW58291360 {

    public static void main(String[] args) {
        System.setProperty("webdriver.chrome.driver", "./libs/chromedriver 4");
         WebDriver driver=new ChromeDriver();
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.pbinfo.ro/?pagina=judge-board&id_problema=3120&user=IosifHriscu");
        List<WebElement> ids=driver.findElements(By.xpath("//*[@id='zona-mijloc']//div/table/tbody/tr/td/label/kbd"));
        for(int i=0;i<ids.size();i++)
        {
            System.out.println(ids.get(i).getText());
        }
        driver.quit();
    }

}

Код Python:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('/usr/local/bin/chromedriver')  # Optional argument, if not specified will search path.
driver.implicitly_wait(15)    
driver.get("https://www.pbinfo.ro/?pagina=judge-board&id_problema=3120&user=IosifHriscu");

WebDriverWait(driver, 3).until(EC.presence_of_element_located((By.XPATH, "//*[@id='zona-mijloc']//div/table/tbody/tr/td/label/kbd"))) #Wait for specific element 

table_rows= driver.find_elements(By.XPATH,"//*[@id='zona-mijloc']//div/table/tbody/tr/td/label/kbd")

for rows in table_rows:
    print rows.text

driver.quit()

выход

#16401488
#16401481
#16401478
0 голосов
/ 08 октября 2019

Xpath - .//label[@for='id16401488']/kbd Предполагается, что в исходном HTML-коде нет другого совпадения с таким же xpath. Если это так, используйте индекс того, что /kbd вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...