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.我使用的是正确的