在主线程外运行时,Watin无法找到元素

时间:2016-12-14 15:43:41

标签: c# .net multithreading watin

问题在于按钮:contains('Deal')选择器,包含交易的按钮确实存在于页面上,Watin在主线程中运行时可以毫无问题地找到它。

    // Add bet, deal cards and wait for animation
    private void dealCards()
    {
        // Start the game if chip exists
        if (browser.Image(Find.BySrc(chipURL)).Exists)
        {
            browser.Image(Find.BySrc(chipURL)).Click();

            // This is where the thread stops

            browser.Button(Find.BySelector("button:contains('Deal')")).Click();
            Thread.Sleep(dealCardsAnimationTime);

            if (Convert.ToInt32(browser.Span(Find.ByClass("player-points")).Text) == 21)
            {
                consoleTextBox.AppendText("You won by blackjack.");
                gameOver = true;
            }

            return;
        }
    }

更新:

浏览器是一个Internet Explore窗口,我使用WatiN进行交互,除了UI更改之外,问题似乎是WatiN无法找到按钮。

然而,它仍然与多线程有些相关,因为相同的代码在没有多线程的情况下工作正常,并且它正在搜索的元素确实存在。

更新2:更改了问题的标题和描述,因为旧问题似乎与此无关。

上下文(如果有必要)

    // When bet button is clicked
    private void button2_Click(object sender, EventArgs e)
    {

        blackjackThread = new Thread(blackjackGame);

        if (dealInProgress == false)
        {
            blackjackThread.Start();
            // blackjackGame();
        }
    }

    // Blackjack deal handler
    private void blackjackGame()
    {

        consoleTextBox.AppendText("\r\n");
        resetVariables();
        dealCards();

        if (gameOver == true)
        {
            checkResult();
            dealInProgress = false;
            blackjackThread.Abort();
            return;
        }

        checkCards();
        logPoints();

        while (gameOver == false)
        {
            botAction();
        }

        checkResult();
        dealInProgress = false;
        blackjackThread.Abort();
        return;
    }

0 个答案:

没有答案