当前位置: 首页 > 面试题库 >

如果元素在屏幕上不可见,则WebElement getText()在Firefox中为空字符串

邵宜年
2023-03-14
问题内容

在将Firefox升级到版本19之后,我的Selenium
Webdriver测试最近失败了。在我的多个测试中,我需要检索页面上但在浏览器窗口中不可见的元素,即,我必须向右滚动才能看到它们。由于升级到Firefox
19(我从15升级到16,所以可能是一个问题),我只能检索在浏览器窗口中看到的元素的文本。我的xpaths正确检索了所有元素,例如在我的以下代码中:

    private void buildColumnsMap(){
    allColumnHeaders = new HashMap<String,Integer>();
    positionToColumnName = new ArrayList<String>();

    WebElement columnsRoot = driver.findElement(By.xpath(COLUMNS_ROOT_XPATH));
    List <WebElement> columns = columnsRoot.findElements(By.xpath("./td/div/span"));
    System.out.println("Number of columns found: " + columns.size());

    for(int i = 0; i < columns.size(); ++i){
        String columnName = columns.get(i).getText();
        System.out.println("Column been inserted: " + columnName);
        allColumnHeaders.put(columnName, i);
        positionToColumnName.add(columnName);
    }
}

列表“列”的大小为38,但是在浏览器窗口中我只能看到10列而无需滚动,因此当我将列名称放入对象时,我得到10列名称,然后所有空格。

Number of columns found: 38
Column been inserted: Date/Time
Column been inserted: Endpoint1
Column been inserted: Endpoint2
Column been inserted: Duration
Column been inserted: Codec1
Column been inserted: Codec2
Column been inserted: Avg MOS1
Column been inserted: Avg MOS2
Column been inserted: Avg Latency1 (ms)
Column been inserted: Avg Latency2 (ms)
Column been inserted: Avg Jitter1 (ms)
Column been inserted: 
Column been inserted: 
...
...

这对我来说在Firefox
15中完全正常,但现在已被破坏。是否有人遇到类似问题并找到解决方法?还是有办法“滚动到某个元素”以强制滚动并因此使其在屏幕上可见?


问题答案:

对于WebDriver和/或Firefox为何以这种方式运行,我找不到答案。在我的AUT中,我有一个网格,用于显示报告以及在Html中看不到的屏幕上不可见的任何单元格/
WebElement,它们似乎没有被隐藏,WebDriver会承认它可以看到它们,但是我无法检索任何元素的值,即getText,getAttribute等。因此,要解决此限制(不确定是错误还是行为方式),我使用了以下JavaScript似乎已解决了对我来说:

private void scrollToElement(WebElement element){

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}

从v16 +开始,这绝对是Firefox行为的变化。希望其他人也能找到帮助。



 类似资料:
  • 问题内容: 我有四个字符串,其中任何一个都可以为空。我需要将它们连接成一个字符串,并在它们之间留有空格。如果我使用: 如果为空,结果将是新字符串开头的空白。另外,如果和为空,则我有三个空格。 当我不需要空格时,如何轻松地加入它们? 问题答案: 通过在调用中使用,它将删除所有虚假元素。

  • 我正在编写一个基本的HTML CSS代码来尝试一些东西。在css中样式化一个div后,该div就从网页中消失了。 请帮帮忙。 下面是代码。代码非常基本。 谢谢! null null

  • 关于网络驱动程序错误 对于ChromeDriver,这是在调试“元素在点不可点击”错误时解决的,但是这个问题也可能发生在火狐中。 在FirefoxDriver中发生此问题时,解决此问题的最佳方法是什么?

  • 下面是我的代码。当我从excel中输入url时,大部分时间都显示org . open QA . selenium . elementnotvisibleexception:元素当前不可见错误。对于像www.travelocity.com这样的网站,它显示点击7 8链接后,但www.google.com显示错误从开始。 线程"main"org.openqa.selenium.ElementNotVi

  • 我试图通过让每个手风琴项目在用户向下滚动页面时自动打开来增强JS手风琴的视觉效果。它们不需要自动关闭。 我使用的手风琴在“点击”时执行2个操作: 手风琴父'div'元素:类. is-open被应用 手风琴子'div'内容: a.)属性已删除aria-隐藏="true" 我如何实现强制这两个动作在滚动/可见而不是单击时启动? 我的JS知识有限。我不能任意编写JS,但可以理解和操作它。 半工作概念(基

  • 请任何人都可以帮助我如何从下拉列表中选择选项,如果元素是不可见的,它是一个布尔属性。以下是html标签: 我正在开发selenium webdriver。下面的代码工作不正常。是否有用于选择不可见元素的示例代码。 当使用以下行时,我也得到了错误:元素当前不可见,因此可能无法与命令持续时间或超时进行交互:32毫秒 或者 请参阅 html,那里的元素是不可见的。任何人都可以建议我如何使元素可见,然后我