如何单击使用<span>标记为Selenium webdriver创建的按钮

时间:2016-08-02 15:48:08

标签: selenium selenium-webdriver selenium-firefoxdriver

我的span标签看起来像是html标签上的按钮

    <span class="middle">Next</span>

我尝试使用

    xpath=driver.findElement(By.xpath(".//*[@id='modal-actions-panel']/div[2]/a/span/span/span")); // by considering fixed id as reference

使用绝对

xpath=driver.findElement(By.xpath("html/body/div[4]/div[2]/a/span/span/span"));  // took this from firebug

并使用

driver.findElement(By.cssSelector("span[class='middle']"));

没有成功!!它抛出以下异常:

  

线程“main”中的异常org.openqa.selenium.NoSuchElementException:无法定位元素:{“method”:“xpath”,“selector”:“// span [contains(。,\”Next \“) ]“}       命令持续时间或超时:30.12秒       有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html

对于我尝试过的所有方法,它都会在选择器细节发生变化时显示相同的异常。有人可以帮我找到解决方案,这样我就可以找到span标签中的Next按钮并单击它。

下一步按钮位于iFrame中:以下是涵盖所需跨度标记的html部分。

                                                                          下一个                                             

我也尝试过:

driver.switchTo().frame("iframe-applicationname_ModalDialog_0");
WebElement el = driver.findElement(By.cssSelector("span.middle"));

但抛出以下错误:

  

引起:org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与

进行交互

如果需要,我可以告诉我一些我错过的东西..

4 个答案:

答案 0 :(得分:0)

试试这个......

driver.findElement(By.xpath("//span[contains(@class,'middle') and contains(text(), 'Next')]"))

答案 1 :(得分:0)

我认为这个元素在框架或iframe中,如果是,那么你需要在找到元素之前切换那个框架或iframe,如下所示: -

driver.switchTo().frame("iframe-applicationname_ModalDialog_0");
WebElement el = driver.findElement(By.cssSelector("span.middle"));
el.click();

//Now after all your stuff done inside frame need to switch to default content 
driver.switchTo().defaultContent();

Edited1 : - 如果因为元素当前不可见而出现异常需要实现WebDriverWait等待元素可见,如下所示: -

 WebDriverWait wait = new WebDriverWait(driver, 10);

//Find frame or iframe and switch
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframe-applicationname_ModalDialog_0"));

//Now find the element 
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//span[@class = 'middle' and contains(text(), 'Next')]")));
el.click();

//Once all your stuff done with this frame need to switch back to default
driver.switchTo().defaultContent();

Edited2 : - 如果遗憾的是,它无法显示,请尝试使用JavascriptExecutor点击它,如下所示: -

WebDriverWait wait = new WebDriverWait(driver, 10);

//Find frame or iframe and switch
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("iframe-applicationname_ModalDialog_0"));

//Now find the element 
WebElement el = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//span[@class = 'middle' and contains(text(), 'Next')]")));

//Now click using JavascriptExecutor
((JavascriptExecutor)driver).executeScript("arguments[0].click()" el); 

//Once all your stuff done with this frame need to switch back to default
driver.switchTo().defaultContent();

答案 2 :(得分:-1)

试试这个

new WebDriverWait(driver, 30).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(@class,'middle') and contains(text(), 'Next')]"))).click();

答案 3 :(得分:-1)

我试过了,它对我有用:

WebElement actionBtn=driver2.findElement(
  By.xpath("//span[contains(@class,'v-menubar-menuitem-caption')
  and contains(text(), 'Actions')]")
);
actionBtn.click();
相关问题