【问题标题】:selenium: element is not visible using cssSelector while visible using xpathselenium:元素在使用 cssSelector 时不可见,而使用 xpath 可见
【发布时间】:2017-01-03 21:47:27
【问题描述】:

我试过java代码:

driver.findElement(By.cssSelector("input.only-numbers.ltr")).sendKeys("111");

我收到一个错误:

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

但是当我将代码更改为 xpath 时,这项工作非常完美

driver.findElement(By.xpath("html/body/section[10]/div/div[2]/form/div[1]/input")).sendKeys("111");

html代码:

<section id="forgot-password-layer" class="modal-layer old-modal animate-in" data-top="120" role="dialog">
<div class="modal-inner">
<a class="modal-close" title="" href="#">
<div class="modal-title">איפוס סיסמה</div>
<div class="form-wrapper">
<form id="form-resetpass" method="post" action="">
<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>
<input class="sprite form-resetpass" type="submit" value="" name="">
<div class="form-error"> </div>
</form>
<div class="new-user-message">
</div>
</div>
</section>

为什么会发生这种情况以及如何使用 cssSelector 解决?

【问题讨论】:

  • 你能分享输入的HTML吗??
  • 看起来你有多个使用 cssSelector 的元素,不幸的是你正在定位隐藏元素,需要验证你的 cssSelector 它是唯一的并找到正确的元素
  • 隐藏?你从哪里知道它被隐藏了?没有可见性=false?

标签: java selenium xpath selenium-webdriver css-selectors


【解决方案1】:

看起来您有多个使用 cssSelector 的元素,不幸的是您正在定位隐藏元素,需要验证您的 cssSelector 它是唯一的并找到正确的元素。

尝试如下,可能会有所帮助:-

driver.findElement(By.cssSelector("form#form-resetpass input[name = 'wupid']")).sendKeys("111");

或者尝试使用WebDriverWait 等到该元素如下所示:-

new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("form#form-resetpass input[name = 'wupid']"))).sendKeys("111");

如果您仍然无法与元素交互,请尝试使用JavascriptExecutor,如下所示:-

((JavascriptExecutor)driver).executeScript("arguments[0].value = arguments[1]", driver.findElement(By.cssSelector("form#form-resetpass input[name = 'wupid']")), "111")

【讨论】:

  • 谢谢你的回答,但它不起作用,我得到同样的错误:线程“main”org.openqa.selenium.ElementNotVisibleException中的异常:元素不可见我添加了html代码
  • @Amir 尝试使用 cssSelector 更新答案并告诉我..:)
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多