【问题标题】:Filling in a form located in a new page with selenium用硒填写位于新页面中的表格
【发布时间】:2019-08-05 23:56:20
【问题描述】:

我正在使用 JavaScript 和 selenium 创建简单的 Web 自动化以用于家庭作业。 练习的目的很简单,点击一个链接并在新页面中填写一个网络表格。 问题是即使我能够正确定位 Web 元素(我认为),我也无法填写此表单。

我尝试使用 Xpath 和 CSS 选择器来定位 Web 元素。


const driver = new selenium.Builder().forBrowser("chrome").build();

const form = driver.findElement(By.linkText("Form Authentication")).click;

const username = driver.findElement(By.xpath("//form/div/div/input[@id = "username"]")).sendKeys("some text");


driver.get(url);

预期的结果应该是填写一些文本的用户名/密码表单。 没有错误出现,只是没有动作,

【问题讨论】:

  • 对不起,我搞砸了代码格式:/
  • 单击“表单身份验证”链接时出现 JavaScript 逻辑错误。你忘记了“点击”后面的()
  • 嘿,非常感谢,非常愚蠢的错误。我现在已经修复并添加了括号,谢谢你的提示:)

标签: javascript selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

请替换下面的代码行:

const username = driver.findElement(By.xpath("//form/div/div/input[@id = "username"]")).sendKeys("some text");

用这一行:

const username = driver.findElement(By.xpath("//form/div/div/input[@id = 'username']")).sendKeys("some text");

由于你在双引号内使用双引号,它一定会给你错误。

希望对你有帮助:)

【讨论】:

  • 这应该钉住 OP。
  • 谢谢@DebanjanB :) OP 是什么意思?
  • 原来,OP 是 Operator 的缩写形式,指的是提出问题的用户。但是现在,新的贡献者用 OP 一词来指代不同的东西 :)
  • 您好,非常感谢您的提示。无论如何,它还没有工作。看起来一旦自动化进入新页面,它就无法再定位 Web 元素。我收到此错误 NoSuchElementError: no such element: Unable to locate element: {"method":"XPath","selector":"//form/div/div/input[@id = 'username']"}。我检查了数百次,Xpath 100% 正确...
  • @CarmineLentini 既然您确定 xpath 是正确的,我怀疑当您尝试搜索它时该元素不存在。请尝试在搜索此元素时使用显式等待。
【解决方案2】:

我发现此代码存在许多问题。我不确定url 变量在运行时包含什么,但我怀疑它包含登录页面的URL。您想先访问 URL,然后填写字段。

const driver = new selenium.Builder().forBrowser("chrome").build();

driver.get(url);

接下来,您需要确保正确调用 JavaScript 中的方法。

const form = driver.findElement(By.linkText("Form Authentication")).click;

这行代码将对click 函数的引用分配给form 变量。我不认为这是你想要的。你想点击链接:

driver.findElement(By.linkText("Form Authentication")).click();

接下来,你不正确地嵌套了双引号:

const username = driver.findElement(By.xpath("//form/div/div/input[@id = 'username']")).sendKeys("some text");

@id = 'username' 周围使用单引号。

此外,HTML 中的 id 属性本身就已经是唯一的了。您可以将最后一个 XPATH 表达式简化为:

By.xpath("//input[@id = 'username']")

您还缺少一个步骤。输入用户名和密码后,您需要提交表单,通常通过单击提交按钮。

【讨论】:

  • 感谢您的宝贵帮助。对于非常丑陋的代码,我很抱歉,我只是在学习 JavaScript,所以我还没有上油。无论如何,我已经进行了您建议的修改并添加了一个窗口处理方法。现在看起来一切正常:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多