selenium:使用cssSelector看不到元素,而使用xpath可见

时间:2016-08-27 09:27:54

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

我尝试了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修复?

1 个答案:

答案 0 :(得分:0)

看起来你使用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")