你理解id。
弹出窗口始终有一个唯一的ID是关闭应用程序的'X',甚至不同的弹出窗口也有相同的'X'关闭选项。
是否有人知道如何不断搜索并关闭“一种连续轮询”形式,如果在任何测试用例中随时出现,都会关闭弹出窗口?
我知道下面列出的以下方法有效,可以成功关闭弹出窗口:
public void closeGiveawayPopup() throws InterruptedException {
WebDriverWait wait = new WebDriverWait(driver, 10);
try {
List<WebElement> elements = wait
.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".close")));
for (WebElement element : elements) {
if (element.isDisplayed()) {
element.click();
Thread.sleep(1000);
wait.until(ExpectedConditions.invisibilityOfAllElements(elements));
Thread.sleep(2000);
}
}
} catch (Exception e) {
throw (e);
}
我试图在TestNG'ForeMethod'注释中添加以下方法,但url dosnt甚至加载:
public void closeGiveawayPopup() throws Exception {
try {
List<WebElement> elements = getDriver().findElements(By.cssSelector(".close"));
for (WebElement element : elements) {
if (element.isDisplayed()) {
element.click();
}
}
} catch (Exception e) {
throw (e);
}
}
答案 0 :(得分:1)
我不认为你做错了菲尔。 @BeforeMethod注释是要走的路。唯一需要改进的是分别为浏览器启动/关闭包括(如果你还没有)@BeforeClass注释。也许,这就是为什么浏览器甚至不打开&#39;正如你在上面的描述中提到的那样。所以像这样:
driver.findElement(By.xpath("//div[@id='competiton_giveaway_popup']//button[@id='close']"));
我能想到的唯一方法就是进行持续的民意调查&#39;你所追求的效果是让你的@Test真的很小(一步一步)。这样希望你能达到预期的效果。因此,不要在1Test下捆绑大量的WebDriver操作,因为这会增加同时出现弹出窗口的风险。
唯一令我困惑的是你的评论&#39;网址甚至没有加载&#39;。你确定你抓住了实际的弹出窗口并没有关闭整个窗口吗?
如果是这种情况,或者上述情况不适合您,请尝试使用Xpath而不是CSS。从您的屏幕截图中,您需要展开div [@id =&#39; competition_inner_和外部详细信息&#39;]并在某处找到关闭按钮(可能您正在寻找&lt; input&gt;,&lt; i&gt;或&lt; button&gt;标记,然后我将能够为您提供更多帮助,并为您提供完整的Xpath,以便您自己尝试。
这样的事情:
WebDriverWait wait = new WebDriverWait(driver, 10);
PS。想到的另一件事是,仔细检查你是否正在使用实际的Testng注释而不是Junit,因为当从IDE导入时,我很容易感到困惑和错误点击(我正在看你的Eclipse!)。因此,您可以删除@BeforeMethod注释并再次编写,确保它指向Testng。
PS2。在你的第9步,你错过了
a
线。我希望这不是给你带来麻烦的人,请仔细检查并告诉我。
祝你好运!