标签在下一个方法完成之前不会改变

时间:2017-11-23 16:57:16

标签: c# selenium label selenium-chromedriver

在我的窗口中,我将登录用户的按钮设置为站点。单击按钮后,它应该更改label.Content = "logging in..." ,然后使用selenium打开chrome驱动程序,登录到站点,然后停止。问题是标签在下一个方法完成之前没有改变。但是在下一个方法之后,我有另一个标签更改成功或失败,这看起来基本上登录标签永远不会出现在UI上。

考虑到我的登录工作在与UI相同的线程上,因此UI不能用于记录时间。但是我的标签应该在程序进入这个状态之前发生变化。

此外,我尝试在执行或添加Thread.Sleep(2000);之前将标签放入方法中,以使程序等待标签设置。没有工作。

我尝试更改sendusername()的帖子,它给了我标签更改,但我的登录名和密码没有正确发送。

您认为可能是什么原因?

public void BtnSubmit_OnClick(object sender, RoutedEventArgs e)
{
    if (TxtUsername.Text.Length<3 || TxtPassword.Text.Length<3)
    {
        MessageBox.Show("You need to fill both boxes!");
    }
    else if (!TxtUsername.Text.Contains("@"))
    {
        MessageBox.Show("You need to add valiable e-mail adress");
    }
    else
    {
        LblLogin.Content = "Logging in..."; // changes label content
        sendUsername();  // opens chromedriver and logs us into the website
        ((MainWindow)Application.Current.MainWindow).tradeUrl = tradeUrl;
        ((MainWindow) Application.Current.MainWindow).username = username;
        ((MainWindow) Application.Current.MainWindow).login = TxtUsername.Text;
        ((MainWindow)Application.Current.MainWindow).password = TxtPassword.Text;
    }
}

1 个答案:

答案 0 :(得分:4)

你的BtnSubmit_OnClick()在方法中的所有代码都执行之前不会返回响应,它实际上并不是实时的。

(1)您可以异步执行sendUserName,这样您的方法就不必等待它完成返回响应 (2)或者您可以通过JavaScript更新标签内容

对于选项#2,您可以使用OnClientClick属性更新标签文本。

<asp:Button ID="Button1" runat="server" OnClientClick="updateLabel();" OnClick="Button1_Click" Text="Button" />