如何使xpath与Selenium一起工作.IO已加载



实现文件拾取器后。我们的一些Selenium回归测试已经开始失败。故障(间歇性的,但在某些情况下更常见)是忽略了通过XPath查询找到的webelement上的单击。例如

driver.findElement(By.xpath("//a[text()='Demo data']")).click();

在findElement()和click()之间添加Sleep(2000)通常可以解决这个问题。(我说一般是因为Sleep(1000)基本上足够了,直到它不够,所以我把它改成Sleep(2000)…)

检查element. isdisplay()没有帮助。如果我们停止包含文件拾取器,问题就会消失。

这是与filepicker有关吗?是否引入IFRAME?我们还注意到JQuery的document.ready()现在似乎被调用了两次。

与此类问题一样,您试图找到由于AJAX请求仍在下载/处理它而在页面上尚未可用的元素。您需要等待元素出现在页面上。

有三种方法:

  1. 使用sleep()。这是dis鼓励的方式。您不应该使用硬编码的休眠,因为您要么等待太长时间(使测试不必要地变慢),要么等待太短时间(测试失败)。
  2. 使用隐式等待。如果没有找到元素,它将总是等待。

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    
  3. 使用显式等待。这使您能够显式地等待一个元素(不)出现/变为可用/诸如此类。

    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Demo data")));
    

我们现在在打开任何包含filepicker.js的页面后首先运行这段代码:

while (FindElementsMaybeNone(By.cssSelector("#filepicker_comm_iframe")).size() == 0)
    Sleep(50);
while (driver.switchTo().frame("filepicker_comm_iframe") == null)
    Sleep(50);
driver.switchTo().defaultContent();

我们猜测filepicker的动态IFRAME插入会扰乱Firefox或Selenium。我没有把这个标记为答案,因为我真的不知道为什么行得通

最新更新