【问题标题】:Selenium Webdriver: Entering text into text field -element not visibleSelenium Webdriver:在文本字段中输入文本-元素不可见
【发布时间】:2016-12-31 06:26:00
【问题描述】:

我正在尝试在文本字段中输入文本 (111),并且我尝试了几乎所有元素定位器、Javascript 技巧,但文本只是没有输入到字段中。

我试过了:

driver.findElement(By.xpath("//div[@class='input-wrapper icon wupid']")).sendKeys("111");
Thread.sleep(2000);

错误:

线程“main”中的异常 org.openqa.selenium.ElementNotVisibleException: 元素不可见

html代码:

<form id="form-resetpass" method="post" action="" _lpchecked="1">
<div class="input-wrapper icon wupid">
<label for="wupid">תעודת זהות</label>
<input class="only-numbers ltr" type="text" value="" maxlength="9" name="wupid" style="background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAPhJREFUOBHlU70KgzAQPlMhEvoQTg6OPoOjT+JWOnRqkUKHgqWP4OQbOPokTk6OTkVULNSLVc62oJmbIdzd95NcuGjX2/3YVI/Ts+t0WLE2ut5xsQ0O+90F6UxFjAI8qNcEGONia08e6MNONYwCS7EQAizLmtGUDEzTBNd1fxsYhjEBnHPQNG3KKTYV34F8ec/zwHEciOMYyrIE3/ehKAqIoggo9inGXKmFXwbyBkmSQJqmUNe15IRhCG3byphitm1/eUzDM4qR0TTNjEixGdAnSi3keS5vSk2UDKqqgizLqB4YzvassiKhGtZ/jDMtLOnHz7TE+yf8BaDZXA509yeBAAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: left center;">
</div>

为什么我不能输入值?

【问题讨论】:

  • 你的驱动比你的渲染引擎快。您需要等到该项目被加载(即它是可见的)然后您才能访问它。另请注意,仅仅因为它在 html 中可见,它可能对 css 隐藏。

标签: java selenium selenium-webdriver


【解决方案1】:

您可以为此使用等待概念。

隐式等待:

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

或 您使用显式等待 + 预期条件:

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("someid")));

希望这能解决您的问题

【讨论】:

  • 感谢您的回答,但在我添加隐式等待后出现错误:线程“main”中的异常 org.openqa.selenium.TimeoutException:等待 10 秒后超时等待可见性By.xpath 定位的元素://div[@class='input-wrapper icon wupid'] 这不是解决问题
  • 先检查xpath是否有效,可以在Firefox中验证。
  • 为了在你的框架中获得稳定性,你应该使用显式等待。
【解决方案2】:

请尝试下面的代码。请不要是C#,请转换成java格式。

WebDriverWait mywait = new WebDriverWait(driver,TimeSpan.FromSeconds(30));
IWebElement txtbox = mywait.Until(ExpectedConditions.ElementIsVisible(By....));
txtbox.SendKeys("111");

【讨论】:

    【解决方案3】:

    考虑到您的 html 代码,输入标签中只有文本字段。所以你可以使用这个 xpath : "//input[@class='only-numbers ltr']" 并使用显式等待。

    【讨论】:

      猜你喜欢
      • 2017-12-28
      • 2013-10-08
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多