浏览器期望短变量输入无法传入python Selenium

时间:2015-09-17 14:34:08

标签: javascript python selenium selenium-webdriver automation

我正在努力自动化与网站的某些互动(我无法访问基本代码)。我认为其中一个文本输入框正在期待一个“短”整数值。但是,我通过python / selenium做的任何事情都不会成功地将值传递给浏览器。每当我这样做时,我都会收到无效的输入错误。

我尝试了driver.send_keys()的许多变体,其值为字符串,int,unicode字符串,长期无效。

我也试过通过javascript发送值:

driver.execute_script("document.getElementById('short_input').setAttribute('value', arguments[0])", '10')

我还尝试通过a = array('h')numpy.short('10')传递“短”变量。

当我收到无效输入错误时,我可以通过单击输入框然后单击离开手动清除它。我假设这是因为然后将值重置为代码所需的短整数。

无论如何通过硒来做到这一点?当我尝试element.click()时,它不会像手动那样清除错误。还是有另一种方法我错过了传递一个短变量?

我想要修改的值的相关HTML是:

<input id="x-auto-23-input" class="N0-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-field E1-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-text A1-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-invalid P0-com-sencha-gxt-theme-base-client-field-TwinTriggerFieldDefaultAppearance-TwinTriggerFieldStyle-focus" type="text" value="" style="width:142px;" tabindex="0">

我在其中看到的任何内容都暗示为什么它与普通文本输入框不同。然而,当我执行element.clear()后跟element.send_keys(10),然后通过单击浏览器的“确定”按钮尝试保存更改时,我收到错误,指出它是无效条目。

2 个答案:

答案 0 :(得分:1)

鉴于提供的HTML,它应该像

一样简单
driver.find_element_by_id("x-auto-23-input").send_keys("abc")

您应该能够发送字符串,因为这是用户输入页面本身的内容。页面的内部可能会将该字符串转换为另一种数据类型,但该页面将为您完成这项工作......您不必担心这一点。

你试过这个吗?结果是什么?

答案 1 :(得分:1)

您尝试使用JavaScript设置值无效。这就是你所拥有的(重新格式化以避免超长线):

driver.execute_script("document.getElementById('short_input')"
                      ".setAttribute('value', arguments[0])", '10')

这样做是设置input元素的属性,这是完全没用的。在创建input时使用该属性,然后它不再用于其他目的。您需要更改的是input元素的属性

driver.execute_script(
    "document.getElementById('short_input').value = arguments[0]", '10')

您过去可能使用过element.set_attribute("value", whatever),但这是有效的,因为Selenium会静默更改属性而不是

所以我们知道为什么尝试不起作用。现在,为什么使用.send_keys()并不适合你,这是一个谜。我刚试过自己创建的页面。我从来没有尝试过将一个数字传递给它,但刚才我尝试了它并让Selenium将输入字段设置为值10。