2013-06-13 24 views
2

我使用Selenium Webdriver + Thucydides。當我嘗試使用複選框(任何狀態:isEnabled(),isDisplayed(),isSelected())時,將發生錯誤。我嘗試了不同的定位器:通過id,name,xpath。該複選框在頁面源中可用。頁面上的所有其他元素都可以正常工作。我使用DisplayedElementLocatorFactory。引起人:org.openqa.selenium.NoSuchElementException:元素不可用

我定位器:

@FindBy(id = "remember") 
// @FindBy(xpath = ".//*[@type='checkbox']") 
// @FindBy(name = "_remember_me") 
    protected WebElement rememberMeCheckbox; 

複選框的HTML代碼:

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

我的功能:

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:30秒後超時。無法找到元素 造成的:org.openqa.selenium.NoSuchElementException:元素是不可用

+0

我已超時,但沒有任何變化。沒有框架。複選框在div - > form - > fieldset中。 –

+0

您使用的是哪種版本的修昔底德?錯誤本身看起來不正確。 –

+0

我正在使用0.9.125。 –

回答

0

我無法重現您的問題:

@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());  
    } 
} 

其中

public class CheckBoxPage extends PageObject{ 

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

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

} 

FindBy小號:org.openqa.selenium.support.FindBynet.thucydides.core.annotations.findby.FindBy

由於所有其他元素的工作確保:

  1. 它不在iframe
  2. HTLM是正確的
1

我有同樣的錯誤嘗試點擊複選框。 我點擊標籤<span>而不是<input>來解決它。

在您的例子可以發現,例如,像這樣(元一個級別比你高的複選框):

@FindBy(xpath = ".//*[@type='checkbox']/..") 
相關問題