当前位置: 首页 > 知识库问答 >
问题:

getAttribute未返回selenium中样式的完整值

徐欣德
2023-03-14
<div id="ntsDiv_1" style="width: 250px; text-align: left; white-space: normal; top: 1090px; left: 131px; visibility: hidden;" class="mlt-pop-container">

但API只返回值的一半。返回宽度:250px;文本-对齐:向左;空白:normal;并且样式的剩馀部分被裁剪。

我试图提取可见性的值,但该方法没有返回样式的完整值。因此,我无法确定可见性的正确值。

我执行了system.out.println(“style is:-”+super.getElement(NEXTAG_STORES_DIV).getAttribute(“style”));

NEXTAG_STORES_DIV对应于id元素的xpath,super.getElement通过xpath提取元素

共有1个答案

窦宏旷
2023-03-14

我刚刚用Selenium2.30.0尝试了这个操作,它工作得很好,返回了整个属性。

尝试以下操作(所有示例都假设element是您需要测试的WebElement):

>

  • 确保只返回属性的一部分。你不是刚把它打印到控制台吗?许多控制台的线路长度有限。尝试将控制台设置为显示长行。以编程方式检查返回值的长度,或尝试计算

    element.getAttribute("style").contains("visibility")
    

    在不同的browser/OS/体系结构中尝试一下。如果它在某个地方起作用,您就会知道这是某个特定的浏览器/驱动程序/操作系统/体系结构/任何东西的问题,您可能可以把它集中起来,或者修复它,或者归档一个bug。

    如果您只是想知道一个元素是否可见,正确且通常首选的方法是调用

    element.isDisplayed()
    

    此方法处理您可能需要检查的所有规则,以便确定它实际上是否可见。

    如果style值在页面上动态更改(即它不是静态编写在页面的源代码中),WebDriver将无法真正看到它,因为它不接收动态更改。尝试通过JavaScript访问该值:

    if (!driver instanceof JavascriptExecutor) {
        throw new IllegalStateException("JavaScript not enabled for this driver!");
    }
    JavascriptExecutor js = (JavascriptExecutor)driver;
    String styleAttribute = (String)js.executeScript("return arguments[0].style", element);
    

    如果实际需要获得浏览器实际使用的CSS可见性属性的计算值,而不是style属性中的值(如果没有任何值或被重写),则需要使用JavaScript的getComputedStyle()方法。一种方法(本文在quirksmode.org上介绍)是这样的:

    var elem = arguments[0];
    if (elem.currentStyle) {
        var vis = elem.currentStyle['visibility'];
    } else {
        var vis = document.defaultView.getComputedStyle(elem, null).getPropertyValue('visibility');
    }
    return vis;
    

    同样,应该通过

    String visibility = (String)js.executeScript(here_goes_the_whole_script, element);
    

  •  类似资料:
    • 这给了我一个错误: 元素在点(436,693)处不可单击。其他元素将接收单击: 还有一个注意事项,如果我将放在之后,放在之前,则测试通过。所以我知道剩下的测试不是失败的地方。由于某种原因,等待的呼叫不起作用。 我认为这可能与以下事实有关:当单击时,我尝试单击的选项在技术上不可见,因为它位于带有scroll元素的组合框中。如果有人知道一个好的方法来模拟滚动到“洋葱”元素,这将是非常感谢的。

    • 问题内容: 我正在使用Node的模块发出 HTTP 请求,但是在上,返回的块似乎并不满足完整的请求响应。这是我的代码: 有没有办法在结束请求之前等待完整的输出?难道我做错了什么?谢谢! 问题答案: 您还应该收听“结束”事件

    • 问题内容: 在elasticsearch的实现中,基于几个字段,我只有几个简单的聚合,如下所示: 聚合工作正常,我得到了相应的结果。但是返回的标题键字段(或任何其他字段-多字)具有单个字的汇总和结果。我需要返回结果中的完整标题,而不是一个单词- 没什么意义。我该怎么办。 当前结果(仅是摘录)- 预期成绩 - 我浏览了很多文档,它解释了汇总结果的不同方法,但是如果结果中的字段中有字段,我找不到如何获

    • 问题内容: 我最近开始使用ElasticSearch。我尝试完成一些用例。我对其中一个有问题。 我已经用他们的全名为一些用户建立了索引(例如“ Jean-Paul Gautier”,“ Jean De La Fontaine”)。 我尝试让所有全名响应某个查询。 例如,我希望以“ J”开头的100个最全名 我得到的结果是全名的所有单词:“ Jean”,“ Paul”,“ Gautier”,“ De

    • 有人能解释一下为什么我通过Postman和http从外部http API得到不同的响应吗。NetCore web Api HttpClient。 这是一个密码 结果是 但Postman返回完整有效的json结果。 为什么结果从。NetCore HttpClient是部分的? 我已经尝试了指定请求头这样的选项: 还补充道: 没有帮助。

    • java completableFuture是否有thenComose方法,该方法具有CompletionStage值类型的param来处理异常?像这样的方法: 我想处理结果和异常并使用函数A转换结果,返回完整的Future,就像: 函数A将调用RPC。它是一个异步函数。 复杂uture.handle