Как объединить два webelement, повторить его и получить текст из сцепленного Xpath - PullRequest
0 голосов
/ 14 февраля 2020

Я работаю с объектной моделью страницы

Объекты моей страницы выглядят так:

    @FindBy(xpath = "//kendo-grid-list//table/tbody/tr/td[9]//div/p")
    List<WebElement> milestoneListSize;

    private static final String milestoneEditButton1 = "//uif-checklist-complex-group[";

    private static final String milestoneEditButton2 = "]//uif-checklist-table/table/tbody/tr/td[6]//a";

    public void clickMilestoneUser(milestoneListSize, String milestoneEditButton1 , String milestoneEditButton2 ) {

        String Actual;
        int totalsize = milestoneListSize.size();

        for (int i = 1; i <= totalsize; i++) {
        Actual = driver.findElement(By.xpath(milestoneEditButton1 + i + milestoneEditButton2)).getText();
        System.out.println(Actual );
        }

    }

Не знаете, почему этот фрагмент кода не работает? Заранее спасибо за помощь

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Есть несколько проблем с вашим кодом, но я не смогу охватить их все.

  • Вы определили milestoneEditButton (1 & 2) как 'private stati c' Это означает, что они доступны внутри каждого метода в этом классе, и вам не нужно передавать их как параметры метода.

  • Вместо использования двух отдельных частей для создания локатора, вы можете иметь один шаблон строки:

    private static final String XPATH_EDIT_BTN = "//uif-checklist-complex-group[%d]//uif-checklist-table/table/tbody/tr/td[6]//a";
    

, который можно использовать Чтобы создать локатор:

By.xpath(String.format(XPATH_EDIT_BTN, i))
  • Значение переменной «Фактическое» переназначается при каждом вызове «Фактическое = ...». Вместо этого вы должны использовать 'Actual + = ...', но лучше всего использовать StringBuilder:

    StringBuilder buffer = new StringBuilder();
    for (int i = 1; i <= totalsize; i++) {
        By loc = By.xpath(String.format(XPATH_EDIT_BTN, i));
        buffer.append(driver.findElement(loc).getText());
    }
    System.out.println(buffer.toString());
    
0 голосов
/ 14 февраля 2020

Используйте первый код, если вы хотите объединенный результат, и второй для отдельного результата

@FindBy(xpath = "//kendo-grid-list//table/tbody/tr/td[9]//div/p")
List<WebElement> milestoneListSize;

String milestoneEditButton1 = "//uif-checklist-complex-group[%d]//uif-checklist-table/table/tbody/tr/td[6]//a";

public void clickMilestoneUser(String milestoneEditButton1) {

        String actual = "";

        int totalsize = milestoneListSize.size();

        for (int i = 1; i <= totalsize; i++) {

            actual = actual+driver.findElement(By.xpath(String.format(milestoneEditButton1, i))).getText();
        }

        System.out.println(actual);

    }

2:

@FindBy(xpath = "//kendo-grid-list//table/tbody/tr/td[9]//div/p")
List<WebElement> milestoneListSize;

String milestoneEditButton1 = "//uif-checklist-complex-group[%d]//uif-checklist-table/table/tbody/tr/td[6]//a";

public void clickMilestoneUser(String milestoneEditButton1) {

        String actual = "";

        int totalsize = milestoneListSize.size();

        for (int i = 1; i <= totalsize; i++) {

            actual = driver.findElement(By.xpath(String.format(milestoneEditButton1, i))).getText();
            System.out.println(actual);
        }

    }
...