有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法单击链接以清除巡更弹出窗口

我正试图点击“结束巡演”链接,以关闭一个活泼的弹出窗口,如所附的屏幕截图所示。我的目标是完全摆脱弹出窗口,因为它会阻止我在测试期间通过该屏幕

我尝试过使用cssSelectorxpathlinkText,但似乎都不起作用。请参阅下面的HTML文件和下面显示的弹出元素的浏览器控制台:

enter image description here

<div class="popover-navigation">
    <a data-role="prev" class="disabled" tabindex="-1">« Prev</a>
    <span data-role="separator">&nbsp;&nbsp;</span>
    <a data-role="next">Next »</a>
    <a data-role="end">End Tour</a>
</div>  

共 (4) 个答案

  1. # 1 楼答案

    可能是您试图在加载框架元素之前访问它。因此,等待框架加载并找到元素并执行操作

    您可以使用下面给出的显式等待

    WebDriverWait wait=new WebDriverWait(driver, 90);        wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frameID"));
    driver.findElement(By.cssSelector(".popover-navigation>a[data-role='end']")).click();
    

    在这里更改frameID

  2. # 2 楼答案

    是的,我看到了您的问题,您可能使用了正确的选择器,但您试图查找的元素显然位于iframe(请参阅控制台中的关闭</iframe>标记)。因此,基本上你的弹出窗口是在另一个窗口中打开的,并通过iframe显示在你当前的选项卡中

    您需要将驱动程序上下文^ ^ {CD3}}应用到您的iFrAME中(由于缺少{{< CD5>}标签属性),我将认为它具有^ {CD4>}。应该是这样的:

    // We have to switch to the popup:
    driver.switchTo().frame("carlsonIframe");
    
    // And now click the 'End Tour' button:
    driver.findElement(By.css("div.popover-navigation a:contains('End Tour')")).click();
    // or: driver.findElement(By.css("div.popover-navigation a:nth-of-type(3)")).click();
    
    // Finally, go back to your original context:
    driver.switchTo().defaultContent();
    

    让我知道这对你是否有效。干杯

  3. # 3 楼答案

    这不是最好的方法,但你可以使用该代码跳过walk me弹出窗口

    try{
        Thread.sleep(2000);
        driver.findElement(By.xpath("//div[@class='popover-navigation']/a[@data-role='end']")).click();
    }catch (NoSuchElementException ignore) {
        logger.info("walk me popup didn't seen")
    }
    
  4. # 4 楼答案

    每当文档对象模型(DOM)/HTML源中有<iframe>时,必须首先使用driver.switchTo().frame("NAME_OR_ID_OF_THE_IFRAME");切换到它

    就你而言

    // Switch to the iframe
    driver.switchTo().frame("kdsiframe");
    
    // Locate the element by link Text
    driver.findElement(By.linkText("End Tour")).click();
    
    // Switch back to default content
    driver.switchTo().defaultContent();
    

    切换到iframe后,您可以通过以下方式找到“End Tour”链接:

    1. 链接文本:
    By lnkEndTour = By.linkText("End Tour");
    1. XPATH:
    By xpEndTour = By.xpath("//*[@id='index-page']//*[contains(@id,'step')]//a[@data-role='end' and contains(text(),'End Tour')]");