Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java selenium webdriver无法找到隐藏在div中的元素_Java_Jquery_Firefox_Selenium_Webdriver - Fatal编程技术网

Java selenium webdriver无法找到隐藏在div中的元素

Java selenium webdriver无法找到隐藏在div中的元素,java,jquery,firefox,selenium,webdriver,Java,Jquery,Firefox,Selenium,Webdriver,我正在java程序中使用selenium firefox Web驱动程序。我试图在文本框中键入一个字符串,然后单击提交。但是,文本框嵌套在一个隐藏元素中,因此我无法使用id、xpath或css的driver.findElement访问它。(但在网页上可以看到)。我得到了NoTouchElementException 以下是网页的html: <div id="mainContent" style="overflow:hidden;"> <!-- content left here

我正在java程序中使用selenium firefox Web驱动程序。我试图在文本框中键入一个字符串,然后单击提交。但是,文本框嵌套在一个隐藏元素中,因此我无法使用id、xpath或css的
driver.findElement
访问它。(但在网页上可以看到)。我得到了
NoTouchElementException

以下是网页的html:

<div id="mainContent" style="overflow:hidden;">
<!-- content left here -->
<div id="contentLeft">
<script type="text/javascript" src="/enterprisesolutions/staticcontent/includes/scripts/QuickTask.js"/>
<script type="text/javascript" src="/enterprisesolutions/Includes/Javascript/date-picker.js"/>
<div id="quickTask">
<h2 class="boxContentHead">
<div id="qtBoxContent" class="boxContent quickTaskBack">
<!-- Accounts and Maintenance -->
<div id="qt_accounts_and_maintenance" class="qtStack" style="display:block">
<!-- Orders -->
<div id="qt_orders" class="qtStack" style="display:block">
<!-- Invoice -->
<div id="qt_invoices" class="qtStack" style="display:block">
<div class="qtIcon invoices"/>
<div class="qtContent">
<div class="qtTitle">Invoices</div>
<div class="qtForm">
<div class="qtLabel qtLabelInvoices">
<div class="qtLeftInvoices">
<div class="firstField">
<div class="qtFormLabel">Account/Phone/Circuit</div>
<div>
<input id="qt_invoices_text1" type="text" value=""/>
</div>
</div>
<div class="secondField">
</div>
<div class="qtRight">
</div>
</div>
</div>
<!-- Repairs -->
<div id="qt_repairs" class="qtStack" style="display:block">
<!-- Lottery Reporting -->
<!-- Reporting -->
<form id="quickTaskForm" name="quickTaskForm" action="/enterprisesolutions/global/quickTaskAction.do" method="post">
<!-- QT No Access -->
<!-- QT Request Access -->
<div id="qt_request_access" class="qtStackAccess" style="display:block">
</div>
<div id="qtBottom" class="quickTaskBack" style="background: none repeat scroll 0% 0% transparent;">
</div>
<!-- start promo and customized pod -->
<div id="promo_msg">
<!-- end promo and customized pod -->
</div>
<!-- end content left-->
<div id="contentRight" style="height: 845px;">
<!-- end content right -->
</div>
这是我的java代码(有点不相关,但人们一直在问) (作为更大项目的一部分,这是唯一相关的代码):

编辑:我使用了Selenium IDE,它在使用命令
SelectFrame\u shellbody
键入之前选择了框架,但当我导出时,它在代码中显示为注释:
//错误:捕获异常[错误:不支持的命令[selectFrame | | u shellbody |]]


感谢您的帮助

尝试使用
WebDriverWait
,现在谈论可见性毫无意义,因为例外是
NoTouchElementException
,这意味着元素不存在。解决此异常后,我们可以继续讨论可见性

driver.switchTo().frame(0); // use this if it's in frame and you don't know how to locate it
WebElement input = (new WebDriverWait(driver, 15)).until(ExpectedConditions.presenceOfElementLocated(By.id("qt_invoices_text1")));

另外,请注意,不要使用
Thread.Sleep()
,请使用。

需要一些等待,在执行脚本时,应用程序需要一些时间来加载隐藏元素,同时selenium会提前一步尝试查找元素,但未找到元素,因为该元素尚未加载,所以,它检查一次并抛出一个异常。使用WebDriverWait利用Thread.Sleep()

即使在足够的等待之后,如果它不工作,请尝试JSExecutor

JavascriptExecutor js=(JavascriptExecutor)驱动程序

js.executeScript(“document.getElementById(div-element-id).click()”


这应该可以……Selenium不会与隐藏元素交互。在实践中,用户可能需要与另一个元素交互,从而使该元素可见。我将使用IDE记录您想要执行的操作,并将运行导出为适用的语言,并查看Selenium如何与元素交互。我猜你遗漏了一个必要的中间步骤。是的,对不起,我忘了包括例外情况。该元素在页面中可见,但Web驱动程序似乎看不到它。我得到了
NoSuchElementException
@user2456513:在这种情况下,用stacktrace和Java代码更新您的问题。您是否使用过WebDriverWait,它是否存在于任何类型的框架中?已更新。我认为等待与此无关,问题是webdriver根本无法查看这些元素。它不在主要内容中的框架中(请参见html)@user2456513:
NoSuchElementException
measn未找到,这甚至是在谈论可见性之前。我认为它可能与框架有关。请参阅更新
driver.get(sheet.getCell(j+1,i).getContents());
                driver.findElement(By.id("UserId")).click();
                driver.findElement(By.id("UserId")).clear();
                driver.findElement(By.id("UserId")).sendKeys(sheet.getCell(j+2,i).getContents());
                Thread.sleep(1000);
                driver.findElement(By.id("PASSWORD")).click();
                driver.findElement(By.id("PASSWORD")).clear();                                
                driver.findElement(By.id("PASSWORD")).sendKeys(sheet.getCell(j+3,i).getContents());
                Thread.sleep(5000);
                driver.findElement(By.id("submit")).click();
                Thread.sleep(2000);
            driver.findElement(By.cssSelector("#qt_invoices_text1")).sendKeys("hi");
driver.findElement(By.id("submit")).click();
driver.switchTo().frame(0); // use this if it's in frame and you don't know how to locate it
WebElement input = (new WebDriverWait(driver, 15)).until(ExpectedConditions.presenceOfElementLocated(By.id("qt_invoices_text1")));