如何使用字段中的linkText提取WebElements并单击它

时间:2016-10-18 23:51:07

标签: java selenium selenium-webdriver extract gettext

我想在字段中捕获文本并能够单击该元素。它提取所有元素'使用以下内容时将文本写入日志:

 String text;
 text = HomePageFields.TableOneColumn(driver).getText();
System.out.println("Table One Column contains following:\n" + text);

TableOneColumn xpath位于不同的类别:

public static WebElement TableOneColumn(WebDriver driver) throws IOException {
element = driver.findElement(By.xpath("//div[contains(@eventproxy,'isc_QMetricsView_0')]/div[1]/div[1]/div[1]/div[1]/div[1]/div[contains(@style,'position')]/div"));
    return element;

我试图使用:

HomePageFields.TableOneColumn(driver).findElement(By.linkText("RFI Overview")).click();

但是它给出了一个错误,说找不到元素。

以下是该特定文字的html链接。但是其他文本包含在同一个标​​记中,但该主标记中包含不同的位置。

HTML path

2 个答案:

答案 0 :(得分:1)

实际上,By.linkText()会根据显示的确切文字找到<a>个元素,而渴望的文字不在任何<a>标记内。这就是你遇到麻烦的原因。

您应该尝试使用By.xpath(),如下所示: -

WebElement el = driver.findElement(By.xpath(".//div[descendant::td[text() = 'RFI Overview']]"));
System.out.println("Table One Column contains following:\n" + el.getText());
el.click();

WebElement el = driver.findElement(By.xpath(".//div[normalize-space(.) = 'RFI Overview']"));
System.out.println("Table One Column contains following:\n" + el.getText());
el.click();

或者正如我在提供的屏幕截图中看到的,<div>具有id属性,其值看起来很独特。如果此元素的此属性值已修复,您还可以尝试将By.id()用作: -

WebElement el = driver.findElement(By.id("isc_3BL"));
System.out.println("Table One Column contains following:\n" + el.getText());
el.click();

答案 1 :(得分:0)

driver.findElement(By.xpath("//td[.='RFI Overview']")).click();

我建议使用id为isc_3BL的div,但我不确定它是静态id。如果是,你绝对可以使用它来隔离任何其他包含相同精确td的外部表格,并附上文本“RFI概述”