【问题标题】:selenium javascript textarea value wrongselenium javascript textarea值错误
【发布时间】:2018-06-04 17:27:57
【问题描述】:

我有一个带有 javascript 的网页,我在其中创建了一个类似这样的文本区域

var textarea = $("<textarea>");
textarea.change(() => {
    console.log(textarea.val());
});

因此,当我更改 textarea 中的值然后更改焦点时,会打印该值。这在使用普通网络浏览器时可以正常工作。

但是,我有一个使用 selenium firefox 驱动程序编辑文本区域的测试。使用与上面类似的相同代码位创建两个单独的文本区域。第一个工作正常。但是对于第二个,selenium 找到 textarea,发送键和标签,但 textarea.val() 返回一个空字符串。在selenium打开的浏览器中,可以看到我发送的key确实是在textarea中输入的。

我的测试(python)中编辑文本区域的代码是

e.clear()
e.send_keys(s)
ActionChains(driver).key_down(Keys.TAB).perform()

正如我所说,我可以检查 selenium 创建的浏览器,并且已经输入了文本,并且我已将其关闭。我也知道这行得通,因为调用了更改回调。

那么为什么js脚本中的textarea.val()会返回一个空字符串呢?

更新 1

另一个奇怪的事情是,如果我在测试失败后让 selenium 创建的浏览器保持打开状态并手动更改 textarea 中的值(与刚刚产生此错误的完全相同!),它会按预期工作!这让我认为这是某种时间问题。所以我在整个测试脚本中添加了 2 秒睡眠语句,但没有帮助。

更新 2

在使用所有 sleep 语句运行测试时,我注意到第一次编辑 textarea 时,插入光标出现在 textarea 中(应该如此)。但是第二次,没有光标出现,即使文本仍然使用send_keys 正确输入。我尝试在e.clear() 之后的文本区域上添加e.click(),但光标仍然没有出现。也许缺少光标与我的问题有关。

【问题讨论】:

  • imo 这是因为您有 2 个文本区域。您正在选择$("&lt;textarea&gt;"),但没有唯一标识您真正想要的那个
  • @KirilS。我认为在 jquery 中,当您像我在这里所做的那样在查询中放入有效的 html 时,jquery 会创建一个新元素而不是搜索现在的元素
  • 我不是 jquery 方面的专家,所以也许它也用于创建元素,但我已经看到该语法作为选择器:w3schools.com/jquery/jquery_ref_selectors.asp
  • 你可以看到一个例子here使用我用来创建元素的语法

标签: javascript python jquery selenium


【解决方案1】:

为了跳出文本区域,您需要按下 Tab 键然后释放它。您的代码没有释放 Tab 键,这就是为什么永远不会触发 textArea.change() 的原因。将代码修改为

ActionChains(driver).key_down(Keys.TAB).key_up(Keys.TAB).perform()

【讨论】:

  • 试过了,但没有帮助
【解决方案2】:

尝试了很多东西。尝试了 GPT14 的答案。尝试将我的 element.click() 语句更改为 ActionChains 语句,认为可能文本区域没有正确聚焦。最后,唯一有效的方法是切换到 Chrome 驱动程序......

虽然仍然有奇怪的行为,textarea 更改回调被调用了两次。第一次,它给出一个空字符串。但第二次返回当前值,所以我的测试能够继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多