小编Ant*_*nus的帖子

如何在UI测试中从标签中检索变量数据

这是我到目前为止所做的,我只是想在标签中输出结果并根据设置结果进行测试:

func testExample() {

    let app = XCUIApplication()
    let enterRomanNumeralsHereTextField = app.textFields["Enter roman numerals here"]
    enterRomanNumeralsHereTextField.tap()
    let convertButton = app.buttons["Convert"]

    //1
    enterRomanNumeralsHereTextField.typeText("LL")
    convertButton.tap()
    XCTAssertTrue(app.staticTexts.element(matching:.any, identifier: "Roman Numerals").label == "NotValidRomanNumber")


    //2
    enterRomanNumeralsHereTextField.typeText("LXXXIX")
    convertButton.tap()
    XCTAssertEqual(app.otherElements.containing(.staticText, identifier:"Roman Numerals").element.value as! String, "89")

    //3
    enterRomanNumeralsHereTextField.typeText("")
    enterRomanNumeralsHereTextField.typeText("LXXVIII")
    convertButton.tap()
    XCTAssertEqual(app.otherElements.containing(.staticText, identifier:"Roman Numerals").element.value as! String, "")



    // Use recording to get started writing UI tests.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
}
Run Code Online (Sandbox Code Playgroud)

第一次尝试(标记为1)给出了一个构建错误,指出"无法调用非函数类型XCUIElement的值.第二次尝试构建但测试失败,因为即使标签确实产生了正确的值,测试也会将标签读取为空白让我们第三次尝试通过了测试,因为我将它与空白标签进行了比较,这就是它的显示效果.

因此,正如我上面所说,我只是想知道如何检索由"计算"或按钮按下的标签值.

unit-testing ios swift xcode-ui-testing swift3

6
推荐指数
1
解决办法
3552
查看次数

调用 notifyAll() 后线程未唤醒

问题是创建 3 个线程,一个每秒打印一个随机数,如果数字是偶数,则第二个线程将其平方,如果是奇数,则第三个线程将其立方。这应该发生给定的次数(在我的代码中它是无限的,稍后将对其进行编辑)。我的问题是,在第一次迭代后(即创建一个随机数,正确的线程唤醒并执行其操作),第二个/第三个线程在再次调用 notifyAll() 后不会唤醒。我的代码如下所示,并带有示例输出。我添加了一些用于调试的打印语句:

package com.company;
import java.util.*;


class RandomNumber implements Runnable{

int randomNum = 0;
Random rand = new Random();
boolean flag = false;

public RandomNumber() {
    Thread newThread = new Thread(this,"Random Number");
    newThread.start();
}

@Override
public synchronized void run()
{

    while(flag == false) {
        System.out.println("random num thread");
        try {
            randomNum = rand.nextInt(100) + 1;
            System.out.println(randomNum);
            flag = true;
            notifyAll();
            //System.out.println(flag);
            Thread.sleep(1000);

        } catch (Exception e) {
            System.out.println("Exception Caught");
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

}

class SquareNumber implements Runnable{

 RandomNumber …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

1
推荐指数
1
解决办法
185
查看次数