Selenium Webdriver java:无法单击确定按钮(按钮标记中的span标记)

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">

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">
            <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”)。单击();