selenium 如何在C#中使用Selify等待文本框中的值

qyzbxkaa  于 2022-11-10  发布在  C#
关注(0)|答案(2)|浏览(143)

我有一个文本输入,它是由基于其他输入的值更改的Java脚本。
我怎样才能让 selenium 等待它的变化?
我目前都试过了

var wait3 = new WebDriverWait(_driver, TimeSpan.FromSeconds(5)).Until(driver => !driver.FindElement(By.Id("gbpAmount")).Equals(""));

bool pop= wait.Until<bool>((d) =>
            {
                var populated1 = d.FindElement(By.Id("gbpAmount")).Text != "";
                var populated2 = d.FindElement(By.Id("gbpAmount")).Text != "0";
                if (populated1 && populated2)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            });

然而,这两种方法都不起作用。要么它们只是通过,然后当我取出并检查元素时,它是“”,或者它们只是超过了等待时间。
然而,很明显,屏幕上的值发生了变化。

kd3sttzy

kd3sttzy1#

在Java中,该方法将是:

(new WebDriverWait(driver, Duration.ofSeconds(5))).until( ExpectedConditions.not(ExpectedConditions.attributeToBe(By.id("gbpAmount"), "value", "")));
String strAmount = driver.findElement(By.id("gbpAmount")).getAttribute("value");

因此,C#中的等价物应该可以工作。

vwkv1x7d

vwkv1x7d2#

您需要检查文本输入的value DOM属性,而不是IWebElement的Value属性。

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

wait.Until(d => d.FindElement(By.Id("gbpAmount")).GetProperty("value") != ""
             && d.FindElement(By.Id("gbpAmount")).GetProperty("value") != "0");

这应该适用于<input type="X"><textarea>
如果这些值本质上是数值,则应等待出现非零结果:

wait.Until(d => decimal.TryParse(d.FindElement(By.Id("gbpAmount")).GetProperty("value"), out decimal result) ? result != 0 : false);

请注意,负数将导致返回TRUE。如果需要正数,请将result != 0更改为result > 0

相关问题