selenium:元素不可见使用cssSelector,而可见使用xpath [英] selenium: element is not visible using cssSelector while visible using xpath

查看:1224
本文介绍了selenium:元素不可见使用cssSelector,而可见使用xpath的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试过了java代码:

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

我收到错误:


线程main中的异常
org.openqa.selenium.ElementNotVisibleException:element not visible


但是当我把代码改为xpath这个工作完美的

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

html代码:

 < section id =forgot-password-layerclass =modal-layer old-modal animate-indata-top =120role =dialog> 
< div class =modal-inner>
< a class =modal-closetitle =href =#>
< div class =modal-title>איפוססיסמה< / div>
< div class =form-wrapper>
< form id =form-resetpassmethod =postaction =>
< div class =input-wrapper icon wupid>
< label for =wupid>תעודתזהות< / label>
< input class =only-numbers ltrtype =textvalue =maxlength =9name =wupidstyle =background-image:url(data:image / png; BASE64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAPhJREFUOBHlU70KgzAQPlMhEvoQTg6OPoOjT + JWOnRqkUKHgqWP4OQbOPokTk6OTkVULNSLVc62oJmbIdzd95NcuGjX2 / 3YVI / TS + t0WLE2ut5xsQ0O + 90F6UxFjAI8qNcEGONia08e6MNONYwCS7EQAizLmtGUDEzTBNd1fxsYhjEBnHPQNG3KKTYV34F8ec / zwHEciOMYyrIE3 / ehKAqIoggo9inGXKmFXwbyBkmSQJqmUNe15IRhCG3byphitm1 / eUzDM4qR0TTNjEixGdAnSi3keS5vSk2UDKqqgizLqB4YzvassiKhGtZ / jDMtLOnHz7TE + yf8BaDZXA509yeBAAAAAElFTkSuQmCC);背景重复:不重复;背景附件:滚动;背景-SIZE:16px的18像素;背景位置:left center;>
< / div>
< input class =sprite form-resetpasstype =submitvalue =name =>
< div class =form-error> < / div>
< / form>
< div class =new-user-message>
< / div>
< / div>
< / section>

为什么会发生,我如何使用 cssSelector

解决方案

看起来你有多个元素使用 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-resetpass input [name ='wupid'])))。sendKeys(111); 

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

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

I tried the java code:

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

I get an error:

Exception in thread "main" org.openqa.selenium.ElementNotVisibleException: element not visible

but when i change the code to xpath this work prefectly

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

the html code:

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

why its happen and how can I fixed by using cssSelector?

解决方案

It's looks like you have more than one element using cssSelector and unfortunately you are locating hidden element, need to verify your cssSelector that it is unique and locating correct element.

Try as below, may be it helps :-

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

Or try using WebDriverWait to wait until this element getting visible as below :-

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

If you're still unable to interact with element, try using JavascriptExecutor as below :-

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

这篇关于selenium:元素不可见使用cssSelector,而可见使用xpath的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆