【问题标题】:unable to get theaders无法获得观众
【发布时间】:2013-09-10 13:44:50
【问题描述】:

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

【问题讨论】:

    标签: java selenium webdriver


    【解决方案1】:

    如果您打算多次使用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++;
    }
    

    【讨论】:

      【解决方案2】:

      我遇到了听起来像您遇到的情况。看看我在

      上的帖子

      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);
      }
      

      【讨论】:

      • 所以当我到达列时我看不到我调用这个函数?很抱歉,我对这个问题很陌生。
      • 是的,你会的。例如,在你的循环中找到元素后,只需将其传递给函数。
      猜你喜欢
      • 1970-01-01
      • 2017-12-08
      • 2020-12-15
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      相关资源
      最近更新 更多