Selenium webdriver 在html中使用文档标记构建xpath

Selenium webdriver 在html中使用文档标记构建xpath,selenium-webdriver,Selenium Webdriver,如何在此网站上构建xpath for Try it按钮: driver.findElementBy.xpath//div[@id='iframewrapper']/iframe/???。单击 我还尝试了xpath//body[@contenteditable='false']/按钮,我知道这是不推荐的。在Chrome控制台中apear可以,但在Selenium中找不到它,我也不知道为什么 编写此代码时,首先需要切换到Frame,然后需要单击该按钮 driver.switchTo().frame

如何在此网站上构建xpath for Try it按钮:

driver.findElementBy.xpath//div[@id='iframewrapper']/iframe/???。单击

我还尝试了xpath//body[@contenteditable='false']/按钮,我知道这是不推荐的。在Chrome控制台中apear可以,但在Selenium中找不到它,我也不知道为什么


编写此代码时,首先需要切换到Frame,然后需要单击该按钮

driver.switchTo().frame("iframeResult")    
driver.findElement(xpath: "//button[text()='Try it']").click()

如果您想使用WebDriverWait:

WebDriverWait wait = new WebDriverWait(driver, 20)  
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("iframeResult")));  
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[contains(text(),'Try it') and @onclick='myFunction()']"))).click();

@拉贾戈帕兰:好吧,如果我们使用它也没有坏处。执行时间将保持不变。执行时间不会保持不变,因为您在单击之前正在检查元素是否已启用!检查元素是否启用需要时间。@Rajagopalan:这几乎不需要500毫秒,如果立即找到元素,甚至更少。而且你会有稳定性。@Rajagopalan不,执行时间保持不变。如果不需要等待,则等待的初始检查将成功。。。因此,执行时间完全相同。如果不完全相同,那么等待必须等待,不等待的查找将失败。如果元素已经存在,则添加等待不会增加执行时间。@Rajagopalan进一步说,如果页面确实因为加载缓慢而需要短暂暂停,则此方法在没有等待失败的情况下是安全的。这将避免不必要的间歇性故障;driver.findElementBy.xpath//按钮[text='Try'];非常感谢。我也不明白为什么我需要在单击之前使用switchTo方法method@BOBIframe在另一个HTML中等于HTML,因此它有自己的作用域,因此每当您发现元素在Iframe中时,您需要在找到任何元素之前切换到该Iframe。@Rajagopalan,以便于完成,假设我们仍然在同一个页面中,并且现在想要在框架之外获得一个元素,那么之后是否有必要切换回原来的页面?如果是这样,怎么做?@khawabonga哦,是的,你必须切换回去。我很困惑,因为你使用了outside这个词。你应该为你想要的编程语言添加一个标记。可能是