Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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将文本框视为隐藏的,即使我可以在浏览器中看到它_Java_Javascript_Css_Selenium_Selenium Webdriver - Fatal编程技术网

Java Selenium将文本框视为隐藏的,即使我可以在浏览器中看到它

Java Selenium将文本框视为隐藏的,即使我可以在浏览器中看到它,java,javascript,css,selenium,selenium-webdriver,Java,Javascript,Css,Selenium,Selenium Webdriver,我有一个类似这样的密码文本框 <input class="blahblah" id="someId" type="password"></input> 显示的isDisplayed出现false和isEnabled出现true。添加了15秒的延迟,使页面有足够的时间加载(页面立即加载)。因此,增加延迟并不能解决问题 我使用firefox开发工具验证了它找到的id是否为正确的元素 为什么即使我可以在浏览器中看到它,selenium也认为它是不可见的?是否有一个父元素具有

我有一个类似这样的密码文本框

<input class="blahblah" id="someId"  type="password"></input>
显示的
isDisplayed
出现
false
isEnabled
出现
true
。添加了15秒的延迟,使页面有足够的时间加载(页面立即加载)。因此,增加延迟并不能解决问题

我使用firefox开发工具验证了它找到的id是否为正确的元素

为什么即使我可以在浏览器中看到它,selenium也认为它是不可见的?是否有一个父元素具有selenium不喜欢的某种样式属性?或者它是selenium驱动程序中的一个bug


我正在使用java 2.45.0版的selenium驱动程序,可能是selenium在DOM中运行得太快了。在我身上发生过多次,而您的元素尚未完全加载到DOM中

我更熟悉可用于Selenium的PHP/PHPUnit库,但也许可以使用类似于waitForElementPresent的命令引入临时等待


此外,如果您可以控制代码,那么您是否也可以为输入字段指定“name”属性?这样做不会有什么坏处。

可能是Selenium在DOM中运行得太快了。在我身上发生过多次,而您的元素尚未完全加载到DOM中

我更熟悉可用于Selenium的PHP/PHPUnit库,但也许可以使用类似于waitForElementPresent的命令引入临时等待


此外,如果您可以控制代码,那么您是否也可以为输入字段指定“name”属性?这样做不会有什么坏处。

查看DOM元素,确认没有显示的父元素:none等,当我遇到类似问题时,这就是问题所在


您能够通过XPath从元素中获取信息吗?这是我的工作。

查看DOM元素,确认没有显示的父元素:none等,当我遇到类似问题时,这就是问题所在


您能够通过XPath从元素中获取信息吗?这是我的工作。

我已经多次面对这种问题。我想到的第一件事可能是您使用的选择器不是唯一的,或者没有返回您要查找的元素。既然

Boolean isDisplayed=el.isDisplayed()//错误的
布尔值isEnabled=el.isEnabled()//正确

不返回
noTouchElement
异常我认为这不是元素加载问题。快速检查可以告诉你发生了什么


driver.findElements(By.cssSelector(“css”)).size()并查看它返回多少计数。

我已经多次遇到这种问题。我想到的第一件事可能是您使用的选择器不是唯一的,或者没有返回您要查找的元素。既然

Boolean isDisplayed=el.isDisplayed()//错误的
布尔值isEnabled=el.isEnabled()//正确

不返回
noTouchElement
异常我认为这不是元素加载问题。快速检查可以告诉你发生了什么


driver.findElements(By.cssSelector(“css”)).size()
并查看它返回多少计数。

问题在于,由于在其父
表上设置了
显示:无
,因此所需的
输入实际上是不可见的:

<table title="Type a password."
       class="dxeTextBoxSys dxeTextBox_MyCompany  "
       id="ctl00_ctl00_MasterContent_MainContentPlaceHolder_ViewCredentials_TopicPanel1_credentialGrid_editnew_4_txtPassword_P_PB"
       style="width: 100%; border-collapse: collapse; display: none;"
       border="0" cellpadding="0" cellspacing="0">

以防上述情况没有任何区别

还有另一个隐藏密码
输入
,可能很重要:

<input value=""
       name="ctl00$ctl00$MasterContent$MainContentPlaceHolder$ViewCredentials$TopicPanel1$credentialGrid$editnew_4$txtPassword$P$PB$CVS"
       type="hidden"> 

以防上述方法不起作用

您可以通过javascript设置输入值:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('ctl00_ctl00_MasterContent_MainContentPlaceHolder_ViewCredentials_TopicPanel1_credentialGrid_editnew_4_txtPassword_P_PB_I').setAttribute('value', 'MyPassword');");

问题是所需的
输入
实际上是不可见的,因为在其父
表上设置了
显示:无

<table title="Type a password."
       class="dxeTextBoxSys dxeTextBox_MyCompany  "
       id="ctl00_ctl00_MasterContent_MainContentPlaceHolder_ViewCredentials_TopicPanel1_credentialGrid_editnew_4_txtPassword_P_PB"
       style="width: 100%; border-collapse: collapse; display: none;"
       border="0" cellpadding="0" cellspacing="0">

以防上述情况没有任何区别

还有另一个隐藏密码
输入
,可能很重要:

<input value=""
       name="ctl00$ctl00$MasterContent$MainContentPlaceHolder$ViewCredentials$TopicPanel1$credentialGrid$editnew_4$txtPassword$P$PB$CVS"
       type="hidden"> 

以防上述方法不起作用

您可以通过javascript设置输入值:

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.getElementById('ctl00_ctl00_MasterContent_MainContentPlaceHolder_ViewCredentials_TopicPanel1_credentialGrid_editnew_4_txtPassword_P_PB_I').setAttribute('value', 'MyPassword');");

这里需要更多信息。要么共享页面的URL,要么尽可能多地使用HTML。有一些想法,但首先需要这个。谢谢。这不是一个可公开访问的url。该页面是使用asp.net生成的,因此其中包含大量垃圾。(旧的遗留代码)谢谢,您能至少显示密码输入的几个父项吗?或者,完整的表单。我打赌密码字段有嵌套输入。我不得不处理同样的垃圾。最后,我不得不通过
JavaScriptExecutor
Shooting blind设置密码,因为信息太少,但我有时会看到Selenium认为某个对象存在的问题。这里需要更多信息。要么共享页面的URL,要么尽可能多地使用HTML。有一些想法,但首先需要这个。谢谢。这不是一个可公开访问的url。该页面是使用asp.net生成的,因此其中包含大量垃圾。(旧的遗留代码)谢谢,您能至少显示密码输入的几个父项吗?或者,完整的表单。我打赌密码字段有嵌套输入。我不得不处理同样的垃圾。最后,我不得不通过
JavaScriptExecutor
设置密码,但我有时会看到Selenium认为对象存在的问题。当你说“css”时,你是指文本框的css吗?请注意,它嵌套在许多父元素中,这些元素中的许多都有自己的css,这个文本框继承了这些css。哦,对不起,您可以使用id来代替。这只是一个例子。或者使用
[type='password']
作为
cssSelector
当您说“css”时,您是指文本框的css吗?请注意,它嵌套在许多父元素中,这些元素中的许多都有自己的css,这个文本框继承了这些css。哦,对不起,您可以使用id来代替。