Я относительно новичок в автоматизации тестирования и, в частности, в Selenium. Я использую веб-драйвер Selenium, Eclipse. Я не могу извлечь значение из столбца/строки:
Я использую следующий код:
Чтобы определить веб-элемент:
@FindBy(xpath = "//*[@id=\"pendingreferrals\"]/tbody/tr")
@CacheLookup
private List<WebElement> SignedReferralsTable;
Метод:
public void PickReferralFromSignedReferralsTable() throws InterruptedException
{ExplicitWait.until(ExpectedConditions.visibilityOfAllElements(SignedReferralsTable));
Thread.sleep(1000);
Integer rowcount = SignedReferralsTable.size();
Integer rownumber = ThreadLocalRandom.current().nextInt(1, rowcount + 1);
Thread.sleep(5000);
**String WebRefID = GlobalVariables._browser.currentDriver.findElement
(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" + rownumber + ") > td:nth-
child(1) > a")).getText().toString();**
actions.moveToElement(GlobalVariables._browser.currentDriver.findElement(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" + rownumber + ") > td:nth-child(9) > a"))).click().perform();
Thread.sleep(5000);
}
В моей строке кода я получаю сообщение об ошибке:
String WebRefID = GlobalVariables._browser.currentDriver.findElement
(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" + rownumber + ") > td:nth-
child(1) > a")).getText().toString();
создает ошибку: java.lang.NullPointerException: невозможно вызвать "String.length()" потому что "projAbb" равно нулю
скриншот кода:
Чтобы было понятно: мой код определяет количество записей (строк) в таблице (количество строк в веб-элементе SignedReferralsTable), затем выбирает случайную строку с учетом общего количества строк (см. переменную rownumber). Затем он щелкает ссылку «Просмотр», чтобы перейти на веб-страницу со случайными сведениями о записи. Однако перед навигацией я хотел бы сохранить идентификационный номер этой конкретной записи, номер которой был случайным образом возвращен в отдельной строковой переменной WebRefID. Это не работает. Пробовал по разному:
String WebRefID = GlobalVariables._browser.currentDriver.
findElement(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" + rownumber + ") >
td:nth-child(1) > a")).getText().toString();
String WebRefID = GlobalVariables._browser.currentDriver.
findElement(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" + rownumber + ") >
td:nth-child(1) > a")).getText();
String WebRefID = GlobalVariables._browser.currentDriver.
findElement(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" + rownumber + ") >
td:nth-child(1) > a")).toString();
Ничего не сработало. Мне нужно сохранить значение, чтобы утверждать (я планирую использовать Assert.assertTrue()), перешел ли я на страницу именно этого конкретного заказа/реферала. Может ли кто-нибудь помочь мне.
Я действительно нашел причину, по которой cssSelect не может идентифицировать/распознать элемент. Моя ошибка заключалась в том, что я поставил «> a» в конце оператора:
String WebRefID = GlobalVariables._browser.currentDriver.
findElement(By.cssSelector("#pendingreferrals > tbody > tr:nth-child(" +
rownumber + ") > td:nth-child(1) > a")).getText().toString();
После удаления ">a" все заработало.
Приносим извинения за доставленные неудобства.