【问题标题】:element hidden selemium webdriver error "element is not currently visible and so may not be interacted"元素隐藏 selenium webdriver 错误“元素当前不可见,因此可能无法交互”
【发布时间】:2015-06-08 17:40:28
【问题描述】:

我正在尝试单击隐藏的搜索按钮。 我尝试了几种方法,但没有奏效:

<form id="form1" name="viewClient" method="post" action="ClientMgmtServlet" abframeid="iframe.0.10752026348407184" abineguid="027BBB6AD3324EFDA3FED3803F068951">
<input type="hidden" value="U7dPiPXFQhCDtDaTHAVH" name="preventionflag"/>
<input id="searchClientBtn" type="hidden" value="Search" name="searchClientBtn"/>

我用了这个方法:

//Enter client ID
String userid = prop.getProperty(CLIENTID);
driver.findElement(By.id("clientId")).sendKeys(userid);

//Enter client name
String clientName = prop.getProperty(CLIENTNAME);
driver.findElement(By.id("clientName")).sendKeys(clientName);

//enter Mobile No
String mobile_no = prop.getProperty(MOBILE_NO);
driver.findElement(By.id("mobileNo")).sendKeys(mobile_no);
WebElement elem = driver.findElement(By.xpath(".//*[@id='searchClientBtn']"));
String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";

((JavascriptExecutor) driver).executeScript(js, elem);

它点击了搜索按钮,但我在字段中输入的数据不接受。它就像我没有只输入数据一样工作。这显示了搜索中的所有用户。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您是否添加了任何明确的等待按钮变为可点击?
  • @LittlePanda 我确实尝试过隐式等待,但没有尝试过显式等待。

标签: java selenium webdriver


【解决方案1】:

你可以检查这个 - How to click on hidden element in Selenium WebDriver?

如果可以更改的话,使用 xpath 查找元素也不是一个好主意。

请注意,某些版本的浏览器(我认为 - FF 34.xx.x、35.xx.x)在执行 js 时存在这个奇怪的问题。

【讨论】:

  • not a good idea to use xpath for finding elements - 我不会给出这样的建议。这没有意义。请解释一下。
  • @Антоний Кунчев 我没有尝试过,但是类似的东西..你可以在我的代码中看到。在最后一部分。但它没有帮助。
  • 请详细说明为什么我们不应该使用 Xpath
  • 在 Xpath 上使用 CSS 是一种很好的做法。它们更快、更易读、更容易维护。对“良好实践”如何使用选择器的少量研究将为您提供所有答案。你也可以检查这个 - stackoverflow.com/questions/16788310/…
【解决方案2】:

id为searchClientBtn的输入元素是一个隐藏字段。您无法在普通浏览器中与之交互。由于 Selenium 只是驱动浏览器,它不会让你做你在普通浏览器中做不到的事情。

这是正常行为,您无法更改。

要提交表单,您可以在该表单中的任何可见输入字段上调用 ​​click() 方法。您还可以抓取表单元素并在其上单击()。

【讨论】:

  • 可以用代码解释我如何做到这一点。这将是很大的帮助。
【解决方案3】:

正如@Stefaan Neyts 解释的那样,尝试提交表单。填写表格中的所有详细信息后尝试以下代码。

driver.findElement(By.id("clientName")).submit();

【讨论】:

    【解决方案4】:

    我发现了我遇到的问题。我有两个具有相同 ID“searchClientBtn”的元素。 所以我用了这个driver.findElement(By.xpath("(.//*[@id='searchClientBtn'])[2]")).click(); 这让我阅读了第二个没有隐藏的元素,它解决了我的问题。 谢谢大家。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多