Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法单击链接以清除巡更弹出窗口_Java_Selenium_Testing_Selenium Webdriver_Webdriver - Fatal编程技术网

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

Java 无法单击链接以清除巡更弹出窗口,java,selenium,testing,selenium-webdriver,webdriver,Java,Selenium,Testing,Selenium Webdriver,Webdriver,我正试图点击“结束巡演”链接以关闭一个弹出窗口,如所附的屏幕截图所示。我的目标是完全摆脱弹出窗口,因为它会阻止我在测试期间通过该屏幕 我尝试过使用cssSelector、xpath和linkText,但似乎都不起作用。请参见下面的HTML窗口和所检查的弹出元素的浏览器控制台,如下所示: «上一篇 下一步» 结束游览 是的,我看到了您的问题,您可能使用了正确的选择器,但您试图查找的元素显然位于iframe中(请参阅控制台中的关闭标记)。所以基本上你的弹出窗口是在一个不同的窗口中打开的,并通过一

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

我尝试过使用
cssSelector
xpath
linkText
,但似乎都不起作用。请参见下面的HTML窗口和所检查的弹出元素的浏览器控制台,如下所示:


«上一篇
下一步»
结束游览

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

您将需要<代码> .SwitctoSo()/Cuths>您的驱动程序上下文,到您的iFrAME(我将认为它具有<代码> ID=)CARLSONIFRAME“,由于缺少<代码> < /COD>标签属性)。应该是这样的:

// 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();

让我知道这是否适合你。干杯

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

您将需要<代码> .SwitctoSo()/Cuths>您的驱动程序上下文,到您的iFrAME(我将认为它具有<代码> ID=)CARLSONIFRAME“,由于缺少<代码> < /COD>标签属性)。应该是这样的:

// 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();

让我知道这是否适合你。干杯

这不是最好的方法,但您可以使用该代码跳过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")
}

这不是最好的方法,但您可以使用该代码跳过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")
}

每当文档对象模型(DOM)/HTML源中存在
时,必须首先使用
driver.switchTo().frame(“框架的名称或ID”)

就你而言

// 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”链接:

  • 链接文本:
  • By lnkEndTour=By.linkText(“结束游览”);
  • XPATH:

  • 通过xpEndTour=By.xpath(“//*[@id='index-page']/*[contains(@id,'step')]///a[@data role='end'和contains(text(),'end-Tour')]”) 每当文档对象模型(DOM)/HTML源中存在
    时,必须首先使用
    driver.switchTo().frame(“框架的名称或ID”)

    就你而言

    // 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”链接:

  • 链接文本:
  • By lnkEndTour=By.linkText(“结束游览”);
  • XPATH:

  • 通过xpEndTour=By.xpath(“//*[@id='index-page']/*[contains(@id,'step')]///a[@data role='end'和contains(text(),'end-Tour')]”) 可能是您试图在加载框架元素之前访问它。因此,等待框架加载并找到元素并执行操作

    您可以使用显式等待,如下所示

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

    在此处更改frameID。

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

    您可以使用显式等待,如下所示

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

    在此处更改frameID。

    请将代码放在问题中而不是图像中。请将代码放在问题中而不是图像中。您好,我尝试了上述建议,但出现以下错误:线程“main”中出现异常org.openqa.selenium.NoSuchFrameException:未按名称或id找到框架元素carlsonIframe@ChitChinwah请检查/确认您的弹出窗口是否位于iframe中(在标记之间,如果是的话,请更新您的代码片段?然后我们可以看到您的iframe具有什么ID、名称和属性,以便识别它并将上下文切换到它。您好,我尝试了上述建议,但出现了以下错误:线程“main”中的异常org.openqa.selenium.NoSuchFrameException:未按名称或id找到框架元素carlsonIframe@ChitChinwah请检查/确认您的弹出窗口是否位于iframe中(在标记之间,如果是,请更新您的代码片段?然后,我们可以看到您的iframe具有什么ID、名称和属性,以便识别它并将上下文切换到它。您好,尝试了您的建议,并收到以下错误消息:线程“main”org.openqa.selenium.NoSuchElementException中的异常:没有此类元素:无法定位元素:{“method”:“xpath”,“selector”:”//div[@class='popover-navigation']/a[@data role='end']”}您是否看到它关闭了walk me弹出窗口?您好,尝试了您的建议并得到了以下错误消息:线程“main”org.openqa.selenium.NoSuchElementException中出现异常:没有此类元素:无法找到元素:{“method”:“xpath”,“selector”:/div[@class='popover-navigation']/a[@data role='end']”}你有没有看到它关闭了“walk me”弹出窗口?我只是好奇你的答案与其他人以前的答案相比带来了什么附加值。提出的新定位策略没有给表带来什么新的内容。此外,
    linkText
    不是最佳实践,因为可能会发生无数本地化更改。还有你的
    xpath
    选择器没有优化。1.我使用的是正确的iframe名称/id。2.答案专门针对一个问题,其中没有提到将涉及本地化。3.Xpath已被用于获取元素,因此不必进行优化,因为这里的优先级不是性能,而是工作代码。我只是想知道at是您的答案相对于其他人以前的答案带来的附加值。建议的新定位策略没有给表带来任何新内容。此外,由于可能发生无数本地化更改,因此
    linkText
    不是最佳做法。而且您的
    xpath
    选择器也没有优化。1.我使用的是正确的