gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:59:03 25 4
gpt4 key购买 nike

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

<input class="blahblah" id="someId"  type="password"></input>

我能够在浏览器中看到这个文本框,并且能够手动输入密码。

然而,当我使用 selenium 测试此 ui 时,虽然它可以正确找到元素,但是当它尝试单击该元素时,它会抛出错误“org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与之交互”

我用

检查了代码
Boolean isDisplayed=el.isDisplayed();//false
Boolean isEnabled=el.isEnabled();//true

isDisplayed 出现了 false 并且 isEnabled 出现了 true。添加了 15 秒的延迟,以便为页面提供足够的加载时间(页面立即加载)。所以增加延迟并不能解决问题。

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

为什么 selenium 认为它是不可见的,即使我能够在浏览器中看到它?可能是其中一个父元素具有 Selenium 不喜欢的某些样式属性吗?或者它是 selenium 驱动程序中的错误?

我正在为 Java 版本 2.45.0 使用 selenium 驱动程序

最佳答案

问题是所需的 input 实际上是不可见的,因为在它的父 table 上设置了 display: none:

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

最有可能的是,该表在您需要确定的特定用户操作中变得可见。

但是,或者,您可以通过 javascript 使 table 可见:

WebElement table = driver.findElement(By.id("ctl00_ctl00_MasterContent_MainContentPlaceHolder_ViewCredentials_TopicPanel1_credentialGrid_editnew_4_txtPassword_P_PB")); 
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].style.display = 'block';", table);

如果以上没有任何区别。

还有一个很重要的隐藏密码input:

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

您可以尝试使其可见并向其发送 key :

WebElement password = driver.findElement(By.name("ctl00$ctl00$MasterContent$MainContentPlaceHolder$ViewCredentials$TopicPanel1$credentialGrid$editnew_4$txtPassword$P$PB$CVS")); 

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].setAttribute('type', 'text');", password);

password.sendKeys("MyPassword");

如果上述方法不起作用。

您可以通过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');");

关于java - Selenium 将文本框视为隐藏,即使我可以在浏览器中看到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com