我想使用绝对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>
答案 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(“仅是文本以查看其是否正常工作”)