Selenium Webdriver java:无法单击确定按钮(按钮标记中的span标记)
HTML代码:Selenium Webdriver java:无法单击确定按钮(按钮标记中的span标记),java,button,selenium-webdriver,Java,Button,Selenium Webdriver,HTML代码: <div id="sieb-ui-popup-mvg-selected" class="AppletStylePopup"> <form onsubmit="return false;" action="/ecom_enu/start.swe" method="post" name="SWEForm4_0"> <div class="siebui-popup-btm siebui-mvg-btn-modifier">
<div id="sieb-ui-popup-mvg-selected" class="AppletStylePopup">
<form onsubmit="return false;" action="/ecom_enu/start.swe" method="post" name="SWEForm4_0">
<div class="siebui-popup-btm siebui-mvg-btn-modifier">
<span class="siebui-popup-button">
<button id="s_4_1_79_0_Ctrl" class="siebui-ctrl-btn siebui-icon-closeapplet s_4_1_79_0 appletButton" aria-label="Responsibilities:OK" title="Responsibilities:OK" tabindex="0" data-display="OK" name="s_4_1_79_0" type="button">
<span>OK</span>
</button>
</span>
</div>
</form>
</div>
也像这样试过,它不起作用
driver.findElement(By.cssSelector(".siebui-ctrl-btn.siebui-icon-closeapplet.appletButton")).click();
driver.findElement(By.xpath(".//*button[@title='Responsibilities:OK']/span[contains(text(),'OK]")).click();
driver.findElement(By.xpath("//button[contains(span/text(), 'OK')]")).click();
还试过下面的,它不起作用
driver.findElement(By.cssSelector(".siebui-ctrl-btn.siebui-icon-closeapplet.appletButton")).click();
driver.findElement(By.xpath(".//*button[@title='Responsibilities:OK']/span[contains(text(),'OK]")).click();
driver.findElement(By.xpath("//button[contains(span/text(), 'OK')]")).click();
还试过下面的,它不起作用。发生超时错误
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframe-applicationname_ModalDialog_0"));
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//span[contains(text(), 'OK')]")));
el.click();
driver.switchTo().defaultContent();
尝试使用firefox的
firebug
和firepath
插件获取xpath。你一定能解决你的问题。如果您不知道如何使用firebug捕获xpath,请参考链接,并在出现任何问题时通知我。在捕获xpath之前,您应该先将firebug和firepath添加到firefox中。请尝试以下方法-
首先获取根元素并将其保存到WebElement对象。然后找到Ok按钮元素并单击
WebElement elem = driver.findElement(By.cssSelector("#sieb-ui-popup-mvg-selected > form > div"));
makeWait(5); //Set any value you need for wait until appearing Ok Button
elem.findElement(By.cssSelector("button[type='button']")).click();
为等待片刻创建另一个本地或全局方法
/*
* make some wait the execution
*/
public void makeWait(int waitForSecond)
{
try {
//Thread.sleep(1000 * waitForSecond);
Thread.currentThread().sleep(1000 * waitForSecond);
} catch (InterruptedException ie) {
System.out.println(ie.getMessage());
}
}
如果不需要,也可以尝试删除makeWait()。可能会有帮助。请使用下面的代码进行检查,可能这会起作用
driver.findElement(By.xpath(".//*[contains(@class,'siebui-popup')]//span[text()='OK']")).click();
尝试在Mozilla中使用Firepath,这样您就可以通过检查CSS和XPATH的不同组合来获得正确的路径。它将为您提供使用选择器识别元素的正确想法。此HTML错误-例如,有一个开始标记
,但我看不到结束标记
。表单中有两个开始标记
,但只有一个结束标记
。这是您页面的真实html代码吗?当我试图在JSFIDLE上运行这个HTML代码时,它根本没有被呈现,它被破坏了。谢谢krokodilko。当我在这里复制时,有三行被折叠了,所以我删除了它们。立即更新HTML代码。在最后一种情况下,在哪个语句中发生超时错误。框架还是按钮?当我在浏览器控制台中执行document.getElementsByTagName(“框架”)时,我没有得到任何结果。所以我认为它不是一个框架。是的,壁炉补充道。OK按钮的xpath是Yep,仅使用firepath。OK按钮的xpath是“/*[@id='s_4_1_79_0_Ctrl']”。这里的数字“4”每次都在变化。绝对路径是“/html/body/div[9]/div[2]/div/div/div/div[3]/form/div[2]/span/button”。此按钮是弹出小程序上的按钮之一。单击此确定按钮将关闭此弹出小程序窗口,并返回到前面的后台主屏幕。我可以在同一弹出小程序窗口中单击其他按钮,但无法仅单击此“确定”按钮。我已经尝试了很多方法,正如在文章中解释的。好的,那么试试这个代码。它应该可以解决您的问题driver.findElement(通过.xpath(“./*[@class=siebui-ctrl-btn-siebui-icon-closeapplet s_4_1_79_0 appletButton”)。单击();