如果我将提供第1栏的文本,我如何获得第2栏的文本

时间:2018-04-05 06:41:23

标签: java selenium selenium-webdriver xpath webdriver

我有一个包含2列的表。第1栏包含金额的类型,即书费,注册费,第2栏包含金额,即500和400.我想得到第2栏(金额)的文本,如何通过提供文本获得第2栏的文本第1列?由于动态数据集,仅给出第2列的xpath对我不起作用。

金额类型的xpath是:

driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[1]")).getText();  (text=Book Fee)
driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[1]")).getText(); (text= Registration fees)

金额的xpath是:

driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[2]")).getText();  (text= 500.00/=)
driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[2]")).getText(); (text=1000.00/=)

3 个答案:

答案 0 :(得分:0)

尝试以下Book Fee费用的XPath:

//*[@id='charges']/table[2]/tr/td[text()='Book Fee']/../td[2]

尝试以下Registration fees费用的XPath:

//*[@id='charges']/table[2]/tr/td[text()='Registration fees']/../td[2]

您可以参数化第一列值,使其适用于所有使用String concatanation:

//*[@id='charges']/table[2]/tr/td[text()=' " + feeType + "']/../td[2]

此处为feeType,是您作为参数传递给方法的值。

答案 1 :(得分:0)

根据您的问题和您共享的 HTML ,您可以通过代码提取图书费注册费文本,如下所示:

String bookFeeText = driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[1]")).getText();
String registrationFeeText = driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[1]")).getText();

现在,要检索下一列的文本,您可以获取从先前列中提取的文本的帮助,如下所示:

driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[1]/td[.='" + bookFeeText + "']//following::td[1]")).getText();
driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr[4]/td[.='" + registrationFeeText + "']//following::td[1]")).getText();

答案 2 :(得分:0)

所以基本上你想要获得费用类型的金额,无论其在表中的位置如何。

List <WebElement> fee_List=driver.findElements(By.xpath("//*[@id='charges']/table[2]/tbody/tr"));
WebElement bookFeeRow=driver.findElement(By.xpath("//td[text()='Book Fee']/.."));
int bookFeeIndex=fee_List.indexOf(bookFeeRow)+1; //'+1' because index starts from 0 and webelement [indices] start from 1
String bookFeeAmount=driver.findElement(By.xpath("//*[@id='charges']/table[2]/tbody/tr["+bookFeeIndex+"]/td[2]")).getText();