用于在文本字段中键入的java Javascript执行与sendKeys不同
我在Linux机器上运行我的测试,并且有以下代码,它不能正确地键入文本-
visibleElement.clear();
visibleElement.sendKeys("I am running on linux machine");
在UI中,实际上输入了不同的文本,比如“在linux机器上运行”、“在linux机器上运行”等等
因此,为了处理这个问题,我像-
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].value='I am running on linux machine';", visibleElement);
这会按文本字段中的方式键入文本,但键入后,会出现Save
按钮,该按钮预计将启用,但未启用
但如果使用sendKeys
,则该按钮将启用
你能告诉我为什么这个javascript行为不同,并提供正确的javascript吗
在一个解决方案中,这两种方法是如何工作的(不点击tab来启用按钮,因为在我的情况下这不是正确的方法)
# 1 楼答案
设置
arguments[0].value = "..."
设置文本字段上的值,但该元素上不会触发任何事件。“保存”按钮可能正在等待change
事件发生在<form>
内的某个地方。您需要使用JavaScript在文本框上手动触发更改事件。见How can I trigger an onchange event manually?你描述的行为让我觉得JavaScript已经在监听更改事件,然后扰乱单词的顺序,就好像尤达已经键入了它们一样。(或者输入尤达的名字?)手动触发更改事件可能会启用“保存”按钮,并且最终可能会得到与使用
sendKeys
相同的文本。如果是这种情况,您可能还希望使用JavaScript启用“保存”按钮:# 2 楼答案
从元素可见开始,并不能保证元素是可交互的,也就是说,你可以直接调用^{
要在所需元素中调用
sendKeys()
,需要为elementToBeClickable()
引入WebDriverWait,并且可以使用以下Locator Strategy:tl;博士
Selenium: How selenium identifies elements visible or not? Is is possible that it is loaded in DOM but not rendered on UI?
# 3 楼答案
尝试用承诺式或异步/等待式写作