【问题标题】:Selenium/Java - is it possible to verify that a driver.switchTo().frame(element) was successful?Selenium/Java - 是否可以验证 driver.switchTo().frame(element) 是否成功?
【发布时间】:2021-03-30 12:57:23
【问题描述】:

我有这个代码:

WebElement iframeElement = driver.findElement(By.xpath(xpIframe));  
driver.switchTo().frame(iframeElement);     

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpLucka)));
driver.findElement(xpLucka).click(); //this click fails
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpSvara)));  //TimeoutException
driver.findElement(xpSvar).click();
driver.findElement(xpSvara).click();

它经常在带有注释//TimeoutException 的行上失败。当我在浏览器中查看处于打开状态的网页状态时,很明显点击之前的行失败了。这令人困惑。该元素显然在那里,我在网络检查器中发现它没有问题,并且上一行的 wait.until 显然成功了。

接下来我要确保不会失败的是switchTo() 语句。如何验证 switchTo-call?

  • 注意,也经常成功。我只是在循环中运行了 9 次,失败了 5 次“但”成功了 4 次。
  • 当然非常欢迎任何其他可能发生这种情况的建议。

【问题讨论】:

    标签: java selenium selenium-webdriver iframe webdriverwait


    【解决方案1】:

    <iframe> 内的元素上click(),因此您必须:

    • 为所需的 frameToBeAvailableAndSwitchToIt 引入 WebDriverWait

    • 为所需的 elementToBeClickable 引入 WebDriverWait

    • 您可以使用以下Locator Strategies

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("xpIframe")));
      new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("xpLucka"))).click();
      

    参考

    您可以在以下位置找到一些相关讨论:

    【讨论】:

      【解决方案2】:

      我在自动化测试中遇到了一些困难,即 WebDriverWait 并不总是有效。您可能已经知道 Thread.sleep(3000);当涉及到自动化测试时,不推荐使用它,但有时您必须使用它。因此,出于测试目的,我会故意使用:

      Thread.sleep(3000); --> add some time, to make sure it switched to iframe
      WebElement iframeElement = driver.findElement(By.xpath(xpIframe));  
      driver.switchTo().frame(iframeElement);     
      Thread.sleep(3000);
      driver.findElement(xpLucka).click(); --> see if it will click on element
      Thread.sleep(3000);
      driver.findElement(xpSvar).click();
      Thread.sleep(3000);
      driver.findElement(xpSvara).click(); --> same for all other elements
      

      【讨论】:

        猜你喜欢
        • 2018-05-08
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 2013-09-27
        相关资源
        最近更新 更多