XPath, который найдет ссылку для загрузки, выглядит следующим образом:
//table/descendant-or-self::tr[td[3][text()='PAS ITD/EOD EX1 Allocation Statement']]/td[7]/a
Находит элемент <table>
, который содержит элемент <tr>
, который имеет элемент <td>
со значением PAS ITD/EOD EX1 Allocation Statement
, а затем направляет вас к элементу <td>
в той же строке, которая содержит ссылку для загрузки.
Чтобы поместить это в код, где можно настроить значение типа отчета, вы можете использовать:
String reportTypeValue = "PAS ITD/EOD EX1 Allocation Statement"
driver.findElement(By.xpath("//table/descendant-or-self::tr[td[3][text()='" + reportTypeValue + "']]/td[7]/a")
* Редактировать *
На основании вашего комментария вы только что стали намного сложнее, теперь у меня есть:
//table/descendant-or-self::tr[td[1][substring(text(), string-length(text()) - string-length('06') + 1)]][td[3][text()='PAS ITD/EOD EX1 Allocation Statement']]/td[7]/a
Это найдет <table>
элемент, который содержит элемент <tr>
, который имеет элемент <td>
со значением PAS ITD/EOD EX1 Allocation Statement
и элемент <td>
, который заканчивается значением 06
.Затем он направляет вас к элементу <td>
в той же строке, которая содержит ссылку для загрузки.
XPath 1.0 не поддерживает окончание - отсюда этот блок:
substring(text(), string-length(text()) - string-length('06') + 1)]
Это работаетдлина текстового узла и длина искомой строки и использование функции подстроки, чтобы обеспечить совпадение последних символов x.
Чтобы поместить его в новый блок кода, который вы можете использоватьнастроить значение типа отчета и идентификатор отчета, который вы можете сделать:
String reportID = "06"
String reportTypeValue = "PAS ITD/EOD EX1 Allocation Statement"
driver.findElement(By.xpath("//table/descendant-or-self::tr[td[1][substring(text(), string-length(text()) - string-length('" + reportID + "') + 1)]][td[3][text()='" + reportTypeValue + "']]/td[7]/a")