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

如何使用Selenium和Java通过PageFactory等待元素的隐身

冯元魁
2023-03-14
问题内容

有没有办法使用PageFactory批注来等待Selenium中不存在的元素?

使用时:

@FindBy(css= '#loading-content')
WebElement pleaseWait;

找到元素,然后:

wait.until(ExpectedConditions.invisibilityOfElementLocated(pleaseWait));

我会得到:

org.opeqa.selenium.WebElement cannot be converted to org.openqa.selenium.By

我可以使用以下方法执行我需要做的事情:

wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector('loading-content')));

但是,我希望能够使用PageFactory批注以使框架保持一致。有没有办法做到这一点?


问题答案:

invisibilityOfElementLocated期望定位器,但是您正在发送网络元素,这就是为什么它会引发错误。您可以通过使用以下方法检查webelement列表来执行操作:

wait.until(ExpectedConditions.invisibilityOfAllElements(Arrays.asList(pleaseWait)));

更新的答案:
如果要检查页面上不存在该元素,则可以检查其列表大小是否等于0,因为当未在UI上显示时,其列表大小将为0。

您可以使用以下方法获取元素的列表:

@FindBy(css='#loading-content')
List<WebElement> pleaseWait;

您可以使用以下方法检查列表大小是否等于0:

if(pleaseWait.size()==0){
     System.out.println("Element is not visible on the page");
     // Add the further code here
}

而且这也不会给NoSuchElement异常。



 类似资料:
  • 等待元素出现在网页上的最佳方式是什么?我已经读到,我们可以使用隐式等待和功能,如网络驱动程序wait,流利的等待等,最后但不是最不重要的线程.sleep()...我使用最多,但想停止使用。 我的场景: 用户登录到网站…网站检查凭据,并以叠加的形式向用户提供报价(一种弹出窗口,但不是单独的窗口)。我需要验证叠加图上的文字。用户登录和显示覆盖之间存在时间间隔。最好的方法是什么,以便硒只等待元素不可见的

  • 问题内容: 我在尝试通过Selenium / Python自动化同时尝试填写网站上的两个字段时遇到一种罕见的问题。我的脚本填写了第一个字段,即 ORIGIN CITY 很好。我已经为第二个字段 DELIVERY ADDRESS 引入了 WebDriverWait 。 __ 我猜想,甚至在诱使服务员之前,“ 交付地址” 字段都可以 单击 。 但是 ORIGIN CITY 字段具有通过事件关联的 Ja

  • 问题内容: 我正在寻找类似于在单击元素之前检查元素是否已显示的内容。我认为可以通过完成此操作,因此我使用了以下方法: 然后点击 不幸的是,有时它等待元素,有时不等待。我寻找了一段时间,找到了这个解决方案: 它等待一切正常,但是在超时之前必须等待10次5、50秒。有点多。因此,我将隐式等待时间设置为1秒,直到现在一切都还不错。因为现在有些事情在超时前等待10秒,而另一些事情在1秒之后超时。 如何覆盖

  • 它一直在等待,但在超时之前,它必须等待10乘以5,50秒。有点多。所以我将隐含的等待设置为1秒,直到现在看起来一切都很好。因为现在有些事情在超时前等待10秒,但有些事情在1秒后超时。 如何在代码中覆盖等待元素的存在/可见性?任何暗示都是可以察觉的。

  • 我如何用一个显式的替换这个隐式的等待呢? driver=新ChromeDriver(功能); driver.manage().DeleteAllCookies();

  • 问题内容: 我有一个带有几个矩形元素的对象。使用,我试图单击主要对象之一。但是,使用xpath- checker我无法检测到相同的正确值。 到现在为止,我可以深入了解以下内容: 我的代码如下: 有人可以帮我吗? 问题答案: 尝试执行以下操作,让我知道问题是否仍然存在: 对于元素: 更新资料 最后,这几乎是最佳选择: