首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >原因: org.openqa.selenium.NoSuchElementException: Element不可用

原因: org.openqa.selenium.NoSuchElementException: Element不可用
EN

Stack Overflow用户
提问于 2013-06-13 17:02:23
回答 2查看 2.5K关注 0票数 2

我使用Selenium Webdriver + Thucydides。当我尝试使用复选框(任何状态: isEnabled()、isDisplayed()、isSelected())时,就会出现错误。我尝试了不同的定位器:按id、按名称、按xpath。该复选框在页面源代码中可用。页面上的所有其他元素都可以正常工作。我使用DisplayedElementLocatorFactory。

我的定位器

代码语言:javascript
运行
复制
    @FindBy(id = "remember")
//  @FindBy(xpath = ".//*[@type='checkbox']")
//  @FindBy(name = "_remember_me")
    protected WebElement rememberMeCheckbox;

HTML-复选框的来源:

代码语言:javascript
运行
复制
<label for="remember" class="remember"><div class="checker" id="uniform-remember"><span><input type="checkbox" value="1" name="_remember_me" id="remember" /></span></div>Remember me</label>

我的函数:

代码语言:javascript
运行
复制
public void isLoginFormLoadedCorrectly()
{
        String pageSource = driver.getPageSource();
        System.out.println(pageSource);

        String errorMessage = "";

        if (!loginInput.isDisplayed())
            errorMessage += "Username field is not displayed or not found\r\n";
        if (!passwordInput.isDisplayed())
            errorMessage += "Password field is not displayed or not found\r\n";
        if (!submitButton.isDisplayed())
            errorMessage += "Submit button is not displayed or not found\r\n";
        if (!passwordRecoveryLink.isDisplayed())
            errorMessage += "Password recovery link is not displayed or not found\r\n";
        if (!rememberMeCheckbox.isDisplayed())
            errorMessage += "Remember me check-box is not displayed or not found\r\n";
    //    if (rememberMeCheckbox.isSelected())
    //        errorMessage += "Remember me check-box is selected\r\n";

        assertThat(errorMessage, errorMessage.equals(""), is(true));
    }

错误: net.thucydides.core.webdriver.WebdriverAssertionError: org.openqa.selenium.NoSuchElementException: 30秒后超时。找不到元素,原因是: org.openqa.selenium.NoSuchElementException: Timed out after 30秒。找不到元素的原因: org.openqa.selenium.NoSuchElementException: element不可用

EN

回答 2

Stack Overflow用户

发布于 2013-10-11 17:23:12

我在尝试单击复选框时也遇到了同样的错误。我通过用标签<span>而不是<input>点击element解决了这个问题。

例如,在您的示例中可以找到这样的元素(比您的复选框高一级的元素):

代码语言:javascript
运行
复制
@FindBy(xpath = ".//*[@type='checkbox']/..")
票数 1
EN

Stack Overflow用户

发布于 2013-06-14 22:37:32

我不能复制你的问题:

代码语言:javascript
运行
复制
@RunWith(ThucydidesRunner.class)
public class VerificationTest {

    @Managed
    public WebDriver driver;

    @ManagedPages
    public Pages pages;

    @Test
    public void testCheckbox(){
        CheckBoxPage pg = pages.get(CheckBoxPage.class);
        pg.openAt("http://www.echoecho.com/htmlforms09.htm");

        assertTrue("checkbox is displayed", pg.ckbxElement.isDisplayed());
        assertTrue("checkbox is selected", pg.ckbxElement.isSelected());    
    }
}

哪里

代码语言:javascript
运行
复制
public class CheckBoxPage extends PageObject{

    @FindBy(css = ".table8 input:checked")
    public WebElement ckbxElement;

    public CheckBoxPage(WebDriver driver) {
        super(driver);
    }

}

同时使用FindByorg.openqa.selenium.support.FindBynet.thucydides.core.annotations.findby.FindBy

由于所有其他元素都可以工作,因此请确保:

  1. ,它不在iframe里。
  2. 超文本标记语言是正确的
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17083114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档