我目前在获取表的标题标题以进行验证方面存在问题,它在第6列之前工作得很好,因为当它转到下一个不可见时,.getText()是空白的。我没有xpath是正确的。
public void getAndSaveDataOfTable (final String tabla) throws FileNotFoundException{
WebElement element = driver.findElement(By.xpath(tabla));
List<WebElement> elements = element.findElements(By.xpath("th"));
Assert.assertTrue(elements.size() > 1);
int cantelements = elements.size();
for (int i = 1; i <= cantelements; i++) {
String data = driver.findElement(
By.xpath(".//div[@class='ui-datatable-scrollable-header-box']//table/thead/tr/th["+ i + "]/span[1]")).getText();
System.out.println("EL nombre del encabezado " + i + " " + data);
datosFila.put(i, data);
}
因此,在第7列和第20列之间,我无法获得标题的文本。
答案 0 :(得分:4)
如果你要多次使用JavascriptExecutor
(你说你的问题在多个专栏7-20上),我建议你可以通过只运行一次JS然后在Java中迭代来优化而不是为每个操作再次运行JS。 JavascriptExecutor
速度很慢,你甚至可以通过避免12次以上的额外JS执行来节省整个测试时间。
// JavaScript to get text from tHeads
String getTheadTexts =
"var tHeads = []; " +
"for (i = o; i < 20; i++) { " +
"var cssSelector = 'div.ui-datatable-scrollable-header-box table thead tr th' + i + ' span:nth-of-type(1)'; " +
"var elem = document.querySelector(cssSelector); " +
"var elemText = ''; " +
"if ((elem.textContent) && (typeof (elem.textContent) != 'undefined')) { " +
"tHeads.push(elem.textContent); " +
"} else { " +
"tHeads.push(elem.innerText); " +
"} " +
"} " +
"return tHeads; ";
// Execute the JS to populate a List
List<String> tHeadTexts = (ArrayList<String>) js.executeScript(getTheadTexts);
// Do some operation on each List item
int i = 0;
for (String data: tHeadTexts){
System.out.println("EL nombre del encabezado " + i + " " + data);
datosFila.put(i, data);
i++;
}
答案 1 :(得分:3)
我遇到了你正在遇到的事情。看看我的帖子
我最终通过使用一些JavaScript来“查看”列来解决它。希望这可以帮助你。
private void scrollToElement(WebElement element){
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}