为什么webelement的测试有时候从源代码的角度看是不正常的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么webelement的测试有时候从源代码的角度看是不正常的相关的知识,希望对你有一定的参考价值。

the source code that has issue

enter image description here

请参考图片

页面中有一个选择

我使用xpath

".//*[@id='edit-comanyinfo-window']//li[text()='20-99']"

找到元素

但有时,文字显示如下:

"
20
-
99
"

为什么?

它并不总是这样显示

我知道还有其他方法来定位元素

我只是想明白为什么!

其他时间的某些页面

enter image description here

这是正常的,html源代码中的元素是“20-99”

答案

您看到的结果是WebElement的绝对表示:

".//*[@id='edit-comanyinfo-window']//li[text()='20-99']"

出现在DOM Tree中的代表如下:

"
20
-
99
"

您的下一个问题是,为什么我们将元素视为:

20-99

这是因为与javascript相关的The HTML DOM (Document Object Model)

JavaScript的力量:

加载网页时,Web Browser会创建页面的Document Object ModelHTML DOM Model被构造为对象树,如下图所示:

The HTML DOM Tree of Objects

使用对象模型,JavaScript可以获得创建动态HTML所需的全部功能,因为:

  • JavaScript可以change页面中的所有HTML elements
  • JavaScript可以change页面中的所有HTML attributes
  • JavaScript可以change页面中的所有CSS styles
  • JavaScript可以remove现有HTML elements and attributes
  • JavaScript可以add new HTML elements and attributes
  • JavaScript可以react到页面中所有现有的HTML events
  • JavaScript可以在页面中使用create new HTML events

WebElement布局的变化是由于JavaScript的存在

以上是关于为什么webelement的测试有时候从源代码的角度看是不正常的的主要内容,如果未能解决你的问题,请参考以下文章

自动化测试 selenium中WebDriver 和WebElement的区别

在 Selenium 测试中使用 XPath 通过文本获取 WebElement

在 selenium 中定位 WebElements 的子节点

webElement.text()获取到内容为空

Selenium 中的 WebDriver 和 WebElement 有啥区别?

selenium中WebElement.getText()为空解决方法