Как использовать REST API пометить тесты как fail?

#java #selenium #selenium-webdriver #browserstack

#java #селен #selenium-webdriver #browserstack

Вопрос:

Я использую это https://www.browserstack.com/docs/automate/selenium/view-test-results/mark-tests-as-pass-fail в качестве ссылки. Но я не могу позволить REST API показывать «сбой». Могу ли я узнать, в чем моя проблема? Я также прикрепил текстовые журналы, в них показано «Запустить JavaScript ……», это правильно?

 import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import java.net.MalformedURLException;
import java.net.URL;

import org.openqa.selenium.JavascriptExecutor;  

public class test1 {

    public WebDriver driver = null;

    public static final String USERNAME = "";
    public static final String AUTOMATE_KEY = "";
    public static final String URL = "https://"   USERNAME   ":"   AUTOMATE_KEY   "@hub-cloud.browserstack.com/wd/hub";

    @BeforeClass
    public void setup() throws MalformedURLException {

        DesiredCapabilities caps = new DesiredCapabilities();

        caps.setCapability("os", "Windows");
        caps.setCapability("os_version", "10");
        caps.setCapability("browser", "Chrome");
        caps.setCapability("browser_version", "80");

        caps.setCapability("name", "Test1");

        driver = new RemoteWebDriver(new URL(URL), caps);
    }

    @Test (priority = 1)
    public void test_1() {
        driver.get("https://youtube.com");

        String actualUrl = "https://www.youtube.com/";
        String expectedUrl = "https://www.youtube.com/";
        Assert.assertEquals(actualUrl, expectedUrl);
        
        JavascriptExecutor jse = (JavascriptExecutor)driver;
        
        if (actualUrl.equals(expectedUrl)) {
          jse.executeScript("browserstack_executor: {"action": "setSessionStatus", "arguments": {"status": "passed", "reason": "Url matched!"}}");
        }
        else {
          jse.executeScript("browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "Url not matched"}}");
        }
    }

    @Test (priority = 2)
    public void test_2() {
        driver.get("https://google.com");

        String actualUrl = "https://www.google.com/";
        String expectedUrl = "https://www.youtube1.com/";
        Assert.assertEquals(actualUrl, expectedUrl);
        
        JavascriptExecutor jse = (JavascriptExecutor)driver;
        
        if (actualUrl.equals(expectedUrl)) {
          jse.executeScript("browserstack_executor: {"action": "setSessionStatus", "arguments": {"status": "passed", "reason": "Url matched!"}}");
        }
        else {
          jse.executeScript("browserstack_executor: {"action": "setSessionStatus", "arguments": {"status":"failed", "reason": "Url not matched"}}");
        }
    }

    @AfterClass
    public void tearDown() {
        driver.quit();
    }
}
 

Я тестировал с youtube и URL-адресом Google.

Ответ №1:

 Assert.assertEquals(actualUrl, expectedUrl);
 

это не мягкое утверждение, оно остановит выполнение команды, поэтому тест не дойдет до строки api.

удалите это из своих тестов или используйте soft assert .

 SoftAssert softAssert = new SoftAssert();
softAssert.assertEquals(actualUrl, expectedUrl)