gpt4 book ai didi

javascript - 调用 SendKeys 时发生 selenium StaleElementReferenceException

转载 作者:行者123 更新时间:2023-11-28 04:03:03 24 4
gpt4 key购买 nike

当它执行发送键时,您将看到城市名称显示,并清除该命令中的所有内容。我加了等待只是为了检查。有办法解决这个问题吗?它不会失败,因为它找到了该字段,然后将其清除。它不可能是javascript,因为我还没有离开该领域,而且我还没有发现任何被“击键”调用的代码。

try
{
var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementExists((By.Id("city"))));
var city = Driver.Instance.FindElement(By.Id("city"));
//Task.Delay(10000).Wait();
city.SendKeys(City);
//Task.Delay(10000).Wait();
}
catch (StaleElementReferenceException ex)
{
var city = Driver.Instance.FindElement(By.Id("city"));
City.SendKeys(City);
}

上面的城市是一个属性。

最佳答案

我通常等待元素可见、事件和可编辑,而不仅仅是等待它存在于 DOM 中。

wait.Until(ExpectedConditions.elementToBeClickable((By.Id("city"))));

参见ExpectedConditions#elementToBeClickable了解详情。

<小时/>

似乎在清除字段时会触发 onchange 或 oninput 事件,并且某些 javascript 代码会修改此元素。

首先尝试此代码 - 每次在对其执行每个操作之前等待该元素:

wait.Until(ExpectedConditions.elementToBeClickable((By.Id("city")))).clear();
wait.Until(ExpectedConditions.elementToBeClickable((By.Id("city")))).SendKeys(City);
<小时/>

如果仍然不起作用,则使用暴力方法 - 循环尝试几次:

wait.Until(ExpectedConditions.elementToBeClickable((By.Id("city")))).clear();

for( int i = 5; i >=0; i--){
try{
wait.Until(ExpectedConditions.elementToBeClickable((By.Id("city")))).SendKeys(City);
break;
}catch( StaleElementReferenceException ex ){
if( i <= 0 ){
throw ex;
}else{
// swallow the exception, wait some time and try again
Utils.silentSleep( 500 );
}
}

其中 Utils.silentSleep 是:

static void silentSleep( long ms ){
try{
Thread.sleep( ms );
}catch( Exception ex ){
}
}

关于javascript - 调用 SendKeys 时发生 selenium StaleElementReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46933689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com