我正在尝试处理警报或框架,我不确定是警报还是框架。
我使用以下代码使用硒登录instagram:
driver.get('https://www.instagram.com/accounts/login/');
var username = driver.findElement(By.name("username", 10000));
username.sendKeys("username");
var password = driver.findElement(By.name("password", 10000));
password.sendKeys("password");
var login = driver.findElement(By.xpath("//button[@type='submit']", 5000));
login.click();
现在执行此操作并登录后,我将看到以下内容:
我在下面要做的是关闭此提醒
function dismissAlert(){
var alert = driver.switchTo().alert();
console.log(alert.getText());
alert.dismiss();
}
但是无法消除此警报并返回主窗口。 我在这里做什么错了。
高于SS的HTML代码:
<div class="pbNvD fPMEg " role="dialog">
<div class="piCib">
<div class="dsJ8D">
<div class="xlTJg">
<div class="G3yoz">
<img height="76px" width="76px" src="/static/images/ico/xxhdpi_launcher.png/99cf3909d459.png" alt="">
</div>
</div>
</div>
<div class="_08v79">
<h2 class="_7UhW9 x-6xq yUEEX KV-D4 uL8Hv">Turn on Notifications</h2>
<div class="_7UhW9 xLCgt MMzan _0PwGv uL8Hv">Get notifications when you have new followers, likes or comments you may have missed.</div>
</div>
<div class="mt3GC">
<button class="aOOlW bIiDR" tabindex="0">Turn On</button>
<button class="aOOlW HoLwm" tabindex="0">Not Now</button>
</div>
</div>
</div>
答案 0 :(得分:1)
使用javascript可能是这样的:
JavascriptExecutor js;
if (driver instanceof JavascriptExecutor) {
js = (JavascriptExecutor)driver;
}
...
js.executeScript("document.querySelector('button.aOOlW.HoLwm').click()");
//Or
js.executeScript("document.querySelector('[role=\"dialog\"] button:nth-child(2)').click()");
使用Java可能像这样:
driver.findElement(By.cssSelector(".aOOlW.HoLwm", 10000)).click();
//Or
driver.findElement(By.xpath("/div[@role='dialog']//button[.='Not Now']")).click();
等待一段时间以使元素可见:
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement dialog = wait.until(
ExpectedConditions.visibilityOfElementLocated(By.xpath("/div[@role='dialog']//button[.='Not Now']")));
dialog.click();
答案 1 :(得分:0)
那是HTML对话框,而不是警报。您可以通过右键单击对话框来判断。如果获得上下文菜单并可以检查HTML,则说明它不是警报。要检查它是否在IFRAME中,您需要检查对话框,然后向上移动DOM。如果您未通过IFRAME而到达DOM的顶部,则您的对话框不在IFRAME中。
您应该能够使用简单的XPath单击这些按钮之一,具体取决于您要单击的按钮:
//button[.='Turn On']
//button[.='Not Now']
我建议您添加一个简短的等待元素可单击,因为有时对话框可能需要一段时间才能启动并完成加载。
答案 2 :(得分:-1)
要关闭通知,您需要点击<button>
,其文本为不立即,既不是警告也不是在任何 iframe 中,您可以使用以下任一解决方案:
css
:
var login = driver.findElement(By.css("div[role='dialog'] button:nth-of-type(2)", 5000));
login.click();
xpath
:
var login = driver.findElement(By.xpath("//div[@role='dialog']//following::button[2]", 5000));
login.click();