Webdriver没有这样的元素,当它确实存在,我已经等了足够长的时间了

Webdriver no such element when it does exist and I have waited long enough for it

本文关键字:时间 存在 元素 Webdriver      更新时间:2023-09-26

我使用WebDriver不测试,但做日常的事情,如找出我的帐户余额。

在这样做的过程中,我有一些未找到的元素,我迭代遍历窗口并能够登录。

现在我已经登录了,我已经使用了按id查找、按xpath查找、按类查找和不查找对象来获取页面上的余额(至少我可以查看它,并且它是在firebug中)。我打印出了页面源代码,但页面源代码只有初始源代码,没有javascript修改。

我试图通过javascript获得body的内部html,它仍然给了我你从页面源获得的html。

是否有可能WebDriver不访问DOM?

我看到的所有帖子都说你必须等待足够长的时间,我有一个隐含的等待30秒。我倾向于认为这不是等待的问题。

当我使用firebug时,我看到了元素,这就是我获得xpath的方式。但是它不能用xpath找到它。

如果我能把源代码(由javascript生成)保存到一个所有元素都存在的文件中,我甚至会感到满意。

我在firefox和windows xp sp3中使用它。

我用下面的代码循环遍历iframe
List <WebElement> framesList = driver.findElements(By.xpath("//iframe"));
for(WebElement frame:framesList){
    element = driver.findElement(By.className("account-balance"));
    String et= element.getText();
    System.out.println(et);
}
System.out.println("frames:" + framesList.size());

我得到帧:0,它检测不到帧

您需要在try/catch中包装. finelement。在try catch子句中,使用循环,可以将隐式超时减少到5秒,并且可以重试,直到不再有异常。也许你会从我的帖子中得到一些灵感。

我知道我的问题是什么了。

我上面使用的代码将不起作用。它迭代帧,但不切换到它们。

  1. 我正在寻找iframe,但代码正在寻找的是在第二帧。我不是在寻找//frame
  2. 我必须切换到合适的帧。要做到这一点,我必须使用firepath为框架找到合适的xpath。
  3. AND在切换到一个帧之前,我必须先进入defaultcontent。

这就是为什么它找不到默认内容的原因。

selenium ide没有记录所需的框架和窗口切换,这太糟糕了。

我看到另一个答案也谈到了这一点如何使用Java在Selenium WebDriver中切换帧