programing

Selenium WebDriver를 사용한HTML 입력값 취득

bestcode 2022. 10. 7. 22:30
반응형

Selenium WebDriver를 사용한HTML 입력값 취득

웹 애플리케이션의 HTML에는 다음과 같은 코드가 있습니다.

<input type="text" name="prettyTime" id="prettyTime" class="ui-state-disabled prettyTime"  readonly="readonly">

실제로 시간을 표시하는 문자열이 페이지에 표시됩니다.

Selenium WebDriver에는WebElement참조하는 오브젝트<input>사용:

WebElement timeStamp = waitForElement(By.id("prettyTime"));

나는 그 가치를 얻고 싶다.WebElement또는 페이지에 인쇄되어 있는 것을 나타냅니다.다 해봤는데WebElementgetters 및 아무것도 사용자에게 표시되는 실제 값을 검색하지 않았습니다.

해라element.getAttribute("value")

textproperty는 요소의 태그 내의 텍스트입니다.입력 요소의 경우 표시되는 텍스트는 다음과 같이 줄바꿈되지 않습니다.<input>태그가 아닌 내부로 들어갑니다.value기여하다.

주의: 대소문자는 중요합니다."Value"를 지정하면 "null" 값이 반환됩니다.이것은 적어도 C#에 해당됩니다.

다음과 같이 할 수 있습니다.

webelement time = driver.findElement(By.id("input_name")).getAttribute("value");

그러면 웹 페이지에 표시되는 시간을 알 수 있습니다.

Python 바인딩의 경우 다음과 같습니다.

element.get_attribute('value')

셀레늄 2에서는 보통 이렇게 씁니다.

WebElement element = driver.findElement(By.id("input_name"));
String elementval = element.getAttribute("value");

또는

String elementval = driver.findElement(By.id("input_name")).getAttribute("value");

앞에서 설명한 바와 같이 다음과 같은 작업을 수행할 수 있습니다.

public String getVal(WebElement webElement) {
    JavascriptExecutor e = (JavascriptExecutor) driver;
    return (String) e.executeScript(String.format("return $('#%s').val();", webElement.getAttribute("id")));
}

하지만 보다시피, 당신의 요소는id속성 및 페이지에 jQuery를 입력합니다.

래지의 대답에 따라 저는

public static string Value(this IWebElement element,
                           IJavaScriptExecutor javaScriptExecutor)
{
    try
    {
        string value = javaScriptExecutor.ExecuteScript("return arguments[0].value", element) as string;
        return value;
    }
    catch (Exception)
    {
        return null;
    }
}

동작은 매우 양호하고, DOM 는 변경되지 않습니다.

사용하다

element.GetAttribute("value");

HTML DOM에 "value" 속성이 표시되지 않더라도 GUI에 필드 값이 표시됩니다.

입력값이 지연이 포함된 스크립트(AJAX 콜 등)에 의해 입력되는 경우 입력이 입력될 때까지 기다려야 합니다.예.

var w = new WebDriverWait(WebBrowser, TimeSpan.FromSeconds(10));
            w.Until((d) => {
                // Wait until the input has a value...

                var elements = d.FindElements(By.Name(name));

                var ele = elements.SingleOrDefault();

                if (ele != null)
                {
                    // Found a single element

                    if (ele.GetAttribute("value") != "")
                    {
                        // We have a value now
                        return true;
                    }
                }

                return false;
                });

        var e = WebBrowser.Current.FindElement(By.Name(name));

        if (e.GetAttribute("value") != value)
        {
            Assert.Fail("Result contains a field named '{0}', but its value is '{1}', not '{2}' as expected", name, e.GetAttribute("value"), value);
        }

Java 사용자:

페이지에 인쇄된 내용을 가져오려면 getText() 메서드를 사용해야 합니다.

getText() 메서드

getText() 메서드는 웹 요소의 표시 가능한 내부 텍스트를 반환합니다.

getAttribute() 메서드

한편, getAttribute() 메서드는 취득하는 Atribute의 값을 가져옵니다.

예:

<input name="Title" type="text" value="LambdaTest" /> Welcome to LambdaTest </input>

getText()

driver.findElement(By.name("Title")).getText();

위 코드 출력 => 람다에 오신 것을 환영합니다시험

getAttribute():

  1. driver.findElement(By.name("Title")).getAttribute("value");

    위 코드 출력 => 람다시험

  2. driver.findElement(By.name("Title")).getAttribute("type");

    위 코드 => 텍스트 출력

출처: Selenium WebDriver의 getText()와 getAttribute()의 차이점

이건 좀 엉터리지만 효과가 있어요.

나는 사용했다JavascriptExecutor그리고 a를 추가했다.divHTML로 변경했습니다.div로.$('#prettyTime').val()

그리고 셀레늄을 이용해서 그 광경을 찾아냈죠div그 가치를 잡습니다.값의 정확성을 테스트한 후 방금 만든 div를 제거했습니다.

언급URL : https://stackoverflow.com/questions/7852287/using-selenium-webdriver-to-retrieve-the-value-of-an-html-input

반응형