Splinter是否可以使用不带名称的browser.fill作为查询

时间:2017-05-02 20:37:09

标签: selenium xpath splinter

我想使用绝对xpath填写搜索栏。 id和类是动态生成的,没有名称变量或实例。因此,如果没有工具来填充没有命名变量的框,感觉就像我被困住了。

有解决方法吗?我可以以某种方式将绝对xpath更改为它的名称赋值,然后根据我指定的绝对xpath的新“类型”进行查询和填充吗?

如果在Splinter中没有这个,那么Selenium中是否有这种方法?

我选择了CSS并且我发现了这个错误'selenium.common.exceptions.InvalidElementStateException:消息:元素当前不可交互,可能无法操作'

编辑:

<div class="type-ahead-input-container" role="search">
<div class="type-ahead-input-wrapper">
<div class="type-ahead-input">
<label class="visually-hidden" for="a11y-ember10393">
Search
</label>
<!---->
<input id="a11y-ember10393" class="ember-text-field ember-view" aria-
autocomplete="list" autocomplete="off" spellcheck="false" 
placeholder="Search" autocorrect="off" autocapitalize="off" role="combobox" 
aria-expanded="true" aria-owns="ember11064" data-artdeco-is-focused="true"/>
<div class="type-ahead-input-icons">
<!---->
</div>
</div>
<!---->
</div>
</div>

2 个答案:

答案 0 :(得分:0)

正如您提到Is there a method for this in Selenium,答案是肯定的。

Selenium支持Sikuli。 Sikuli可以自动化您在屏幕上看到的任何内容。它使用图像识别来识别和控制GUI组件。当无法轻松访问GUI的内部或源代码时,它非常有用。

您可以找到有关Sikuli here的更多信息。

如果这回答了你的问题,请告诉我。

答案 1 :(得分:0)

当您收到类似这样的错误消息时,可能是您的搜索结果与预期的不同。可能是您得到了多个结果,即一个列表。在列表上,您无法输入。

您可以找到带有xpath的输入框,从列表中选择所需的框(尝试),然后使用WebDriverElement _set_value方法在其中输入文本。由于_,这不合适,但很有用。

input_list = browser.find_by_xpath('// div [@ class =“ type-ahead-input”] / input [@ class =“ ember-textfield ember-view”]')

input_list [1] ._ set_value(“仅是文本以查看其是否正常工作”)