Java + Selenium:ElementNotVisibleException

时间:2015-12-22 06:21:01

标签: java selenium xpath

我在EBays'推进上传工具(网址:http://cgi5.ebay.com/ws/eBayISAPI.dll?NewListing&cpg=20&aid=1&from=wn&sid=529765574701&itemid=0&cat1=177005)。我点击黄色框"点击添加照片 - 需要第一张照片" - 我可以使用XPath ".//*[@id='upl-fileInp']";上传第一张照片但是当我尝试使用XPath ".//input[contains(@class,'upl-fileInp')]"上传第二张或第三张照片时,我在Selenium中获得了元素不可见的异常。我理解错误的起源但我没有看到该元素不可见。我已经尝试了许多不同的XPath变体,但无济于事。我尝试了webdriver等待,但也没有工作。 HTML代码是:

<li kp="1" data="">
<span class="tg-li">
<div class="thumb" style="border: 1px solid rgb(255, 255, 255);">
<div class="disableLyr" style="display: none;"/>
<a class="del" title="delete"/>
<div class="guide">
<div class="throb">
<a class="addPicBtn" style="display: block;">
<i/>
<b>Add photos</b>
<input id="upl-11450764546022" class="upl-fileInp" type="file" multiple="" title="Select photos" value="" name="d"/>
</a>
<div class="picIcon" style="display: none;"/>
<a class="genericError" tabindex="0" style="border: 1px solid rgb(255, 255, 255);">
</span>
</li>
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li kp="1" data="">
<li class="last" kp="1" data="">
</ul>
<div id="tg-mainPicPnl" tabindex="-1">Main photo</div>
</div>
<div class="arrow rt">
</div>
<!-- TODO: Remove. Replaced by BubbleText. ******************************************* Thumbnails gallery tooltip *********************************************** <div id="tg-tooltip"><div class="ptr"></div><div class="msg"><div class="pad"><span class="hdg"></span><b>:</b><span class="bdy"></span><div class="hide"></div></div></div></div>-->
<!--******************************************* BubbleText ***********************************************-->
<div id="bt-bubbleTextTmp" class="puBubbleText">
<div id="up-uploadBtnWrap" style="display: inline-block;">
</form>
</div>
<!--

2 个答案:

答案 0 :(得分:0)

虽然这不是一个很好的选择,但尝试使用sleep,这样你就会知道你的问题是否在等待。例如

sleep(5)

答案 1 :(得分:0)

使用显式等待更合适,在尝试单击之前尝试等待特定元素。像:

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[contains(@class,'upl-fileInp')]")));

element.click();