getText(),JavascriptExecutor,innerText,textContent仅从只读字段返回null

时间:2018-04-14 10:28:39

标签: java selenium selenium-chromedriver

关键更新看来,当我们使用Selenium到达页面时,只读字段永远不会加载。它是一个加载的document.jsp页面。但是当我们手动访问页面时,我们会获得该数据。我正在使用ChromeDriver。我认为这解释了为什么我在使用Selenium时无法检索只读字段。如果有人知道某项工作,请告诉我。

更新: 自写这个问题以来,我再次使用CSS尝试了innerText,但它返回"  "而不是"青铜"。所以看起来我能够检索一些东西。但它是 。我怎样才能获得"青铜"

我正在尝试使用ChromDriver从只读元素的字段中检索文本。以下是HTML代码。我想要检索String" Bronze"

<div class="column label-left" style="width:25%">
    <div class="form-item clearfix null" id="attr_wrapper_1_offerType_t">
        <label class="form-label" for="offerType_t" style="width: 130px"><span style="padding-right: 5px">Offer Type:</span></label>
        <div class="form-element field-wrapper" id="field_wrapper_1_offerType_t" style="padding-left:130px">
            <div class="field" message=""><span class="readonly-wrapper" id="readonly_1_offerType_t">New Business</span></div>
            <div id="msg_1_offerType_t" class="error-hover" data-action-message="" message=""></div>
        </div>
    </div>
    <div class="form-item clearfix null" id="attr_wrapper_1_dealClass_t">
        <label class="form-label" for="dealClass_t" style="width: 130px"><span style="padding-right: 5px">Deal Class:</span></label>
        <div class="form-element field-wrapper" id="field_wrapper_1_dealClass_t" style="padding-left:130px">
            <div class="field" message=""><span class="readonly-wrapper" id="readonly_1_dealClass_t">Bronze</span></div>
            <div id="msg_1_dealClass_t" class="error-hover" data-action-message="" message=""></div>
        </div>
    </div>
    <div class="form-item clearfix attr-spacer" style="height: 25px;"></div>
    <div class="form-item clearfix attr-spacer" style="height: 25px;"></div>
</div>

我正在使用id =&#34; readonly_1_dealClass_t&#34;但它返回null 我也试过xpath =&#34; // span [contains(@id,&#34; dealClass&#34;)]&#34;。它也返回null。

首先,id,xpath,CSS上的 getText()所有这些都返回null。然后我尝试了以下所有选项。

我也尝试使用 JavascriptExecutor 并检索文本(),但它也没有帮助。
我还为上面的ID尝试了 innerText textContent 但没有成功。 我等了60秒,直到元素可见。它返回true。这意味着它可见。但它只是拒绝检索字符串&#34;青铜&#34;。
我也试过getAttribute(&#34; value&#34;)。显然没有成功。

我还以为我可以使用id =&#34; field_wrapper_1_dealClass_t&#34;并在其上使用innerText。仍然没有成功。那只会返回很多空白。

我还可以尝试检索字符串&#34;青铜&#34;?

PS:我没有使用Firefox的问题。 Chrome只是拒绝继续。而业务需求就是现在只使用Chrome。所以我必须在Chrome中使用它。请帮忙。

我希望我已经清楚了,我希望我已经提供了足够的HTML代码。

更新 这将返回值的值,即空白。

final String script = "return arguments[0].getAttribute('innerHTML')";

WebElement randomRow = driver.findElement(By.xpath("(//div[@class='field']/span)[21]"));
String value = (String) ((JavascriptExecutor) driver).executeScript(script, randomRow);

更新2:

这也会返回[]:

String myText = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='readonly-wrapper' and starts-with(@id,'readonly_') and contains(@id,'_dealClass_t')]"))).getAttribute("innerHTML");

3 个答案:

答案 0 :(得分:0)

根据您共享以检索字符串青铜的HTML,您必须诱导 WebDriverWait 以获取元素的可见性,如下所示:

String myText = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[@class='readonly-wrapper' and starts-with(@id,'readonly_') and contains(@id,'_dealClass_t')]"))).getAttribute("innerHTML");

答案 1 :(得分:0)

我认为你可以通过获取'innerHTML'属性来获得它:

final String script = "return arguments[0].getAttribute('innerHTML')";

WebElement randomRow = driver.findElement(By.xpath("(//div[@class='field']/span)[21]"));
String value = (String) ((JavascriptExecutor) driver).executeScript(script, randomRow);

答案 2 :(得分:0)

因此,经过多次试运行后,发现使用Selenium登录时页面没有完全加载。我复制了使用Selenium打开的URL,并将其与手动打开的URL进行了比较。他们是不同的。 formCreate之后的document.jsp之后的部分对于加载Selenium的页面完全不同。因此,为了避免太多复杂情况,我使用driver.get("url")并将"url"作为实际网址,然后将其打开。这正确地加载了字段,我能够进行验证。