Selenium 웹 드라이버를 사용하여 HTML 입력 값 검색 prettyTime” readonly=”readonly”> 실제로 페이지에 표시되는 것은

웹앱의 HTML에는 다음 코드가 있습니다.

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

실제로 페이지에 표시되는 것은 시간을 표시하는 문자열입니다.

Selenium Web Driver WebElement에는 <input>사용을 참조 하는 객체 가 있습니다.

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

의 값 WebElement, 즉 페이지에 인쇄 된 내용 을 얻고 싶습니다 . 나는 모든 WebElement게터를 시도했지만 사용자가 보는 실제 값을 검색하지 못했습니다. 도움이 필요하세요? 감사.



답변

시험 element.getAttribute("value")

text속성은 요소의 태그 내의 텍스트입니다. 입력 요소의 경우 표시된 텍스트는 <input>태그로 래핑되지 않고 value속성 내부에 있습니다.

참고 : 케이스가 중요합니다. “Value”를 지정하면 ‘null’값이 반환됩니다. 이것은 적어도 C #의 경우에 해당됩니다.


답변

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

webelement time=driver.findElement(By.id("input_name")).getAttribute("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");

답변

파이썬 바인딩의 경우 다음과 같습니다.

element.get_attribute('value')

답변

@ragzzy의 대답에 따라 사용

 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을 변경하지 않습니다.


답변

앞서 언급했듯이 다음과 같이 할 수 있습니다.

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

그러나 보시 id다시피 요소에는 속성이 있어야 하며 페이지에 jquery도 있어야합니다 .


답변

입력 값이 약간의 지연 시간 (예 : 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);
        }