无法获得领奖

时间:2013-09-10 13:44:51

标签: java selenium webdriver

我目前在获取表的标题标题以进行验证方面存在问题,它在第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列之间,我无法获得标题的文本。

2 个答案:

答案 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)

我遇到了你正在遇到的事情。看看我的帖子

WebElement getText() is an empty string in Firefox if element is not physically visible on the screen

我最终通过使用一些JavaScript来“查看”列来解决它。希望这可以帮助你。

private void scrollToElement(WebElement element){
    ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}